QLineEdit - событие фокуса

Я должен соединить событие фокуса от некоторых QLineEdit элемент (ui->lineEdit) к методу focus(). Как я могу сделать это?

12
задан AAEM 22 February 2019 в 14:19
поделиться

2 ответа

Когда QLineEdit получает фокус, сигнал не передается. Таким образом, идея подключения метода к событию фокуса неуместна.

Если вы хотите получить сигнал с фокусом , вам нужно будет унаследовать класс QLineEdit. Вот пример того, как этого можно достичь.

В файле myLineEdit.h у вас есть:

class MyLineEdit : public QLineEdit
{
  Q_OBJECT

public:
  MyLineEdit(QWidget *parent = 0);
  ~MyLineEdit();

signals:
  void focussed(bool hasFocus);

protected:
  virtual void focusInEvent(QFocusEvent *e);
  virtual void focusOutEvent(QFocusEvent *e);
}

В файле myLineEdit.cpp у вас есть:

MyLineEdit::MyLineEdit(QWidget *parent)
 : QLineEdit(parent)
{}

MyLineEdit::~MyLineEdit()
{}

void MyLineEdit::focusInEvent(QFocusEvent *e)
{
  QLineEdit::focusInEvent(e);
  emit(focussed(true));
}

void MyLineEdit::focusOutEvent(QFocusEvent *e)
{
  QLineEdit::focusOutEvent(e);
  emit(focussed(false));
}

Теперь вы можете подключить MyLineEdit :: focussed () ваш метод focus () (слот).

27
ответ дан 2 December 2019 в 05:14
поделиться

Я предполагаю, что вы имеете в виду connect как в сигналах/слотах, событие focus не является сигналом, это виртуальный метод, который вы должны переопределить, чтобы изменить поведение:

http://doc.qt.io/qt-5/qlineedit.html#focusInEvent

2
ответ дан 2 December 2019 в 05:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: