C++ 未调用focusOutEvent
我将C++ 未调用focusOutEvent,c++,qt,C++,Qt,我将#include包含到我的代码中,并实现了focusOutEvent,如下所示: void MyWidget::focusOutEvent(QFocusEvent *e) { if(e->type() == QEvent::FocusOut) { fprintf(stderr, "hello"); } } virtual void focusOutEvent(QFocusEvent * event); 小部件描述符具有以下额外行: installE
#include
包含到我的代码中,并实现了focusOutEvent
,如下所示:
void MyWidget::focusOutEvent(QFocusEvent *e)
{
if(e->type() == QEvent::FocusOut)
{
fprintf(stderr, "hello");
}
}
virtual void focusOutEvent(QFocusEvent * event);
小部件描述符具有以下额外行:
installEventFilter(this);
setFocusPolicy(Qt::WheelFocus);
我对头文件也有如下定义:
void MyWidget::focusOutEvent(QFocusEvent *e)
{
if(e->type() == QEvent::FocusOut)
{
fprintf(stderr, "hello");
}
}
virtual void focusOutEvent(QFocusEvent * event);
问题是,无论我做什么(选项卡或单击其他地方),都没有将此事件称为焦点事件。如何解决此问题?可能是因为它与QWidget中的declarion不匹配而未调用它
virtual **protected** void QWidget::focusOutEvent ( QFocusEvent * event )
此外,您不能尝试调用setMouseTracking(true)
(文档中说不需要,但这可能会有所帮助),最好调用原始事件处理程序您可以指定您正在运行的操作系统吗?检查
MyWidget
是否以modal方式显示(modal:您无法与父窗口小部件交互)
如果是这样,那么当其父控件处于焦点时,MyWidget
始终处于焦点(我猜)
您可以做的是不以模式显示它(调用show()
而不是exec()
)
或者您可以将其设置为顶级小部件(无父级)。我的窍门是将焦点强制放在对话框上。 i、 e: 最初我有一个
dialog->activateWindow()
,它应该将焦点设置为对话框,但setFocus()
似乎可以更好地完成任务
然后,当我单击对话框外的任何位置时,调用了我重新实现的focusOutEvent()
注意:这是在Fedora 25(KDE Spin)上用Qt 5.7.1测试的
installEventFilter(此)应删除代码>。通常不需要为同一对象添加事件筛选器对象。如果在eventFilter
方法实现(如果有)中过滤事件,也可能是故障的原因。已删除installEventFilter
,但没有更改。我会尝试让您知道。我正在使用openSuse