gpt4 book ai didi

c++ - 如何取消 winEventFilter 上的 WM_CLOSE?

转载 作者:行者123 更新时间:2023-11-28 07:02:53 26 4
gpt4 key购买 nike

我创建了简单的 handler inside my QApplication :

bool QtMyApplication::winEventFilter ( MSG * msg, long * result ){
switch(msg->message) {
case WM_CLOSE:{
qDebug() << "Haha Not killing appp =)";
*result = 0;
return true;
break;
}
}
return false;
}

然后我启动了我的应用程序,打开了任务管理器,在我的 qt 应用程序上调用了 End Task,几秒钟后收到了消息:

enter image description here

实现 QWidget WinEvent 也得到了相同的结果在我的 QMainWindow :

bool QMyMainWindow::winEvent(MSG *message, long *result)
{
switch(message->message) {
case WM_CLOSE:{
qDebug() << "Haha Not killing appp =)";
*result = 0;
return true;
break;
}
}

return QMainWindow::winEvent(message, result);
}

注意应用程序和任务管理器是从 Windows Server 8 r2 上的 Administrator 启动的

所以我想知道如何处理任务管理器在QApplicationQMainWindow 上发送的WM_CLOSE 以便End Programm消息不会显示?

最佳答案

比寻找窗口系统关闭事件更好的(并且不那么特定于平台)方法是在主窗口中重新实现 Qt closeEvent 函数。假设您的应用程序有 quitOnLastWindowClosed标志设置,它会在窗口关闭后退出。

在你的主窗口代码中,实现closeEvent

void MainWindow::closeEvent(QCloseEvent *event)
{
if(want_to_check)
{
int result = QMessageBox::critical(this, tr("Are you sure"),
tr("Are you sure you want to exit?"),
QMessageBox::Yes | QMessageBox::No);
if(result==QMessageBox::Yes)
{
// You can save files, etcetera, here
event->accept(); // The event is accepted, the window will close, and the application will exit
}
else
{ // Your window will not close, and application will stay open
event->ignore(); // The window will stay open
}
}
}

关于c++ - 如何取消 winEventFilter 上的 WM_CLOSE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22175207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com