我包括了 #include <QFocusEvent>
进入我的代码并实现 focusOutEvent
如下:
void MyWidget::focusOutEvent(QFocusEvent *e)
{
if(e->type() == QEvent::FocusOut)
{
fprintf(stderr, "hello");
}
}
小部件描述符有以下额外的行:
installEventFilter(this);
setFocusPolicy(Qt::WheelFocus);
我对头文件也有如下定义:
virtual void focusOutEvent(QFocusEvent * event);
问题是,无论我做什么(tab 键或单击其他地方)都没有调用此焦点事件。我该如何解决这个问题?
最佳答案
对我来说,诀窍是将注意力集中在对话框上。 即:
QDialog *dialog = new QDialog();
...
dialog->show();
dialog->raise(); // to make sure it's shown on top
dialog->setFocus();
最初我有一个 dialog->activateWindow()
应该同样将焦点设置到对话框,但是 setFocus()
似乎可以更好地完成工作完成。
然后,当我点击对话框外的任何地方时,我重新实现的 focusOutEvent()
被调用。
注意:这是在装有 Qt 5.7.1 的 Fedora 25 (KDE Spin) 上测试的
关于c++ - focusOutEvent 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17946448/