focusOutEvent is not called
focusOutEvent is not called
我在代码中包含了#include <QFocusEvent>
,并实现了focusOutEvent
,如下所示:
void MyWidget::focusOutEvent(QFocusEvent *e)
{
if(e->type() == QEvent::FocusOut)
{
fprintf(stderr, "hello");
}
}
Widget描述符有以下额外的行:
installEventFilter(this);
setFocusPolicy(Qt::WheelFocus);
我对头文件也有如下定义:
virtual void focusOutEvent(QFocusEvent * event);
问题是,无论我做什么(选项卡或单击其他地方)都没有调用此焦点事件。我该如何解决这个问题?
对我来说,诀窍是把焦点集中在对话框上。即:
QDialog *dialog = new QDialog();
...
dialog->show();
dialog->raise(); // to make sure it's shown on top
dialog->setFocus();
最初我有一个dialog->activateWindow()
,它应该同样地设置对话框的焦点,但setFocus()
似乎能更好地完成任务。
然后,当我单击对话框之外的任何位置时,我重新实现的focusOutEvent()
被调用。
注意:这是在Fedora 25(KDE Spin)上用Qt 5.7.1 测试的
可能是因为它与QWidget 中的declarion不匹配而没有被调用
virtual **protected** void QWidget::focusOutEvent ( QFocusEvent * event )
此外,您也不能尝试调用setMouseTracking(true)
(documentaion说不需要,但这可能会有所帮助),最好调用原始事件处理程序
你能指定你正在运行的操作系统吗?
检查MyWidget
是否以模态方式显示(模态:不能与父窗口小部件交互)。
如果是这样的话,那么MyWidget
在其父级处于焦点时总是处于焦点(我想)。
您可以做的是不以模式方式显示它(调用show()
而不是exec()
)
或者您可以将其作为顶级小部件(无父级)。
相关文章:
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- OpenCV Android C++ imwrite not found
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 使用单词"not"作为C ++类的名称会导致VS2019错误
- 错误"Could not find Boost"(缺少:上下文标头)
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- Is !NaN not a NaN?
- 为什么我会" void value not ignored as it ought to be"?
- 解决"ld: library not found for -ltensorflow_framework.2.3.0"
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- Directx 11 - CompileFromFile() is not compiling
- "Called Object Type is Not a Function or Pointer" 与 typedef 和类
- "Called object 'int' is not a function or a function pointer"错误
- 为什么OpenSSL给我一个"called a function you should not call"错误?
- OnKillFocus not being called
- focusOutEvent is not called
- mouseReleaseEvent is not called
- mouseMoveEvent is not called