QLineEdit - фокус события - PullRequest
10 голосов
/ 10 мая 2010

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

Ответы [ 2 ]

26 голосов
/ 10 мая 2010

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

Если вы хотите получить сигнал focused, вам придется получить класс 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() методу (слоту).

2 голосов
/ 10 мая 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...