QLineEdit - 焦点事件

Max*_*rai 12 c++ qt

我必须将焦点事件从某个QLineEditelement(ui->lineEdit)连接到方法focus().我怎样才能做到这一点?

Loh*_*run 27

当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);
}
Run Code Online (Sandbox Code Playgroud)

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));
}
Run Code Online (Sandbox Code Playgroud)

您现在可以将MyLineEdit::focussed()信号连接到您的focus()方法(插槽).

  • 直接使用此示例而不进行任何更改可能/将生成错误“构造函数不允许返回类型”。解决办法是加一个“;” 在 MyLineEdit.h 中的类定义之后 (2认同)