在 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/