开发者

How to connect focus event from QLineEdit?

开发者 https://www.devze.com 2022-12-30 06:36 出处:网络
I have to connect focus event开发者_Python百科 from some QLineEdit element (ui->lineEdit) to the method focus(). How can I do this?There is no signal emitted when a QLineEdit gets the focus. So the

I have to connect focus event开发者_Python百科 from some QLineEdit element (ui->lineEdit) to the method focus(). How can I do this?


There is no signal emitted when a QLineEdit gets the focus. So the notion of connecting a method to the focus event is not directly appropriate.

If you want to have a focused signal, you will have to derive the QLineEdit class. Here is a sample of how this can be achieved.

In the myLineEdit.h file you have:

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);
};

In the myLineEdit.cpp file you have :

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));
}

You can now connect the MyLineEdit::focussed() signal to your focus() method (slot).


I assume you mean connect as in signals/slots, focus event isn't a signal it's a virtual method you have to override in order to change the behavior:

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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号