我必须将焦点事件从某些QLineEdit
元素( ui->lineEdit
)连接到方法 focus()
。我怎么能这样做?
答案 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)
我假设您的意思是连接信号/插槽,焦点事件不是信号,它是一个虚拟方法,您必须覆盖以改变行为: