c++ - focusOutEvent 未被调用

标签 c++ qt

我包括了 #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/

相关文章:

c++ - 使子窗口出现在任务栏中

c++ - 等待线程

c++ - 将窗口放在前面 -> raise()、show()、activateWindow() 不起作用

c++ - const char* 与 C++ 双重翻译问题

c++ - 为什么我不能从我的 setMonth 函数中更改类变量 "name"?

c++ - 字节正则表达式与 C++ 中的 Boost 匹配

c++ - 在 Qt 上,如何在运行时更改工具栏中某个 Action 的图标?

c++ - mingw下Qt 5静态编译失败引用off64_t

python - boost python : tie lifetime of argument to returned value using return_internal_reference

c++ - 从类名转换