QLineEdit - 焦点事件

时间:2010-05-10 15:51:06

标签: c++ qt

我必须将焦点事件从某些QLineEdit元素( ui->lineEdit )连接到方法 focus() 。我怎么能这样做?

2 个答案:

答案 0 :(得分:26)

当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()方法(广告位)。

答案 1 :(得分:2)

我假设您的意思是连接信号/插槽,焦点事件不是信号,它是一个虚拟方法,您必须覆盖以改变行为:

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