c++ - 处理闪现窗口事件

标签 c++ windows qt winapi

在 Windows 上,当父(主)窗口被任何模态对话框阻塞时,单击主窗口会导致对话框闪烁。此行为默认适用于 Windows 操作系统。据我了解,手动这可以通过 WinApi 的 FlashWindow 来实现。函数或 Qt 的 QApplication::alert .

有没有办法在模态对话框中处理这个事件?特别是我想在对话框中添加一些额外的操作。我对 Qt-way 解决方案感兴趣,但 WinApi-way 也适用。尝试通过 QObject::eventFilter 处理事件对话框闪烁时不给出任何事件。

最佳答案

你需要结合Qwidget::nativeEvent检查模态对话框 QApplication::activeModalWidget

例如,在模态窗口的父级中选中鼠标按钮。

bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
   MSG* msg = static_cast<MSG*>(message);
   if (msg->message == WM_SETCURSOR) {
       QWidget* w = qApp->activeModalWidget();
       if (w) {
           WORD mouseMsg = (msg->lParam >> 16);
           if (mouseMsg == WM_LBUTTONDOWN) {
               qDebug() << "Click outside";
           }
       }
   }
   return false;
}

关于c++ - 处理闪现窗口事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53059999/

相关文章:

linux - 在 Linux 上存储 Qt 应用程序数据文件 - 权限不足

c++ - 如何生成不同的新 QColors

c++ - STL中迭代器和容器的关系

c++ - 在堆栈上分配局部变量并使用指针算法

ruby-on-rails - bson Gem 构建 native 扩展失败

windows - 如何检测 Windows 10 亮/暗模式?

c++ - QT 图形绘图,如何更改 QGraphicsView 的坐标系/几何图形

c++ - vector::insert 重载之间的 libc++ 区别

c++ - 带有头文件的纯函数文件总是导致 undefined reference

windows - 从 Ansible 中注册的变量创建字典/列表