当应用程序在后台运行时,如何弹出QMessageBox
How to pop up QMessageBox when the application is running in background?
我一直在开发一个处理视频处理的Qt C++应用程序。这通常需要很长时间,这样用户就可以启动流程并将等待的窗口最小化。
现在我遇到了一个问题,即当流程完成时,无法向用户发出警报。我可以在前台显示应用程序中的QMessageBox。然而,当用户最小化应用程序并处理其他事情时,没有消息可以主动通知用户。
此通知不必是弹出窗口。它甚至可能在任务栏上闪烁。如有任何建议,我们将不胜感激。
提前感谢!
编辑:
我感谢每个人迅速而详细的回应。QMessageBox和QSystemTrayIcon是两种可能的解决方案。我确实通过以下代码部分解决了我的问题:
HWND hHandle = FindWindow(NULL,L"nameOfYourApplication");
FLASHWINFO pf;
pf.cbSize = sizeof(FLASHWINFO);
pf.hwnd = hHandle;
pf.dwFlags = FLASHW_TIMER|FLASHW_TRAY; // (or FLASHW_ALL to flash and if it is not minimized)
pf.uCount = 8;
pf.dwTimeout = 75;
FlashWindowEx(&pf);
这将使任务栏闪烁。再次感谢每一位参与其中的人!
您可以使用QSystemTrayIcon从任务栏中显示messagex。
使用方法QSystemTrayIcon::showMessage激发通知。
使用QSystemTrayIcon::setVisible(bool-visible),您可以在托盘中显示/隐藏图标。
使用QSystemTrayIcon::setIcon设置所需的图标。
内部QMainWindow:
ShowWindow((HWND)this->winId(), SW_MINIMIZE);//#include <windows.h>
ShowWindow((HWND)this->winId(), SW_MAXIMIZE);
showMessageBox();
QSystemTrayIcon
是正常的解决方案,但您应该添加新代码,托盘中的许多应用程序可能会很烦人,所以您应该确保您的应用程序确实需要图标托盘。回到最初的问题:
如果你使用这个:
QMessageBox::information(this,"title","text");
那么你的QMessageBox
将真正隐藏为你的窗口,但当你使用这个:
qApp->setQuitOnLastWindowClosed(false);
QMessageBox box;
box.setText("text");
box.exec();
例如:
qApp->setQuitOnLastWindowClosed(false);
QMessageBox *box = new QMessageBox(this);
box->setWindowTitle("title");
box->setText("text");
box->show();
然后,如果您的窗口被隐藏或未被隐藏,您将获得此QMessageBox
。
为什么我们需要qApp->setQuitOnLastWindowClosed(false);
?默认情况下,Qt应用程序在最后一个窗口关闭时关闭,所以如果您关闭此框,但窗口将被隐藏,则应用程序将被关闭。使用setQuitOnLastWindowClosed
,它将正常运行。
编辑:
QMessageBox *box = new QMessageBox;
box->setWindowTitle("title");
box->setText("text");
box->show();
this->showNormal();
- SDL 窗口不会弹出
- Xaudio2在更改缓冲区或循环时弹出声音
- 如何使用结构和指针推动和弹出一堆双打
- C++ 尝试生成随机数时弹出警告帮助?
- 为什么弹出我的堆栈会返回垃圾而不是初始变量?
- C++中的无锁堆栈弹出实现
- 如何在 c++ 中创建对的优先级队列.这会弹出具有最小值的元素.默认的弹出最大值
- 我无法在某个点(从用户那里)获得输入,即使没有错误弹出编译
- 我的堆栈弹出式磁带的实现是否泄漏内存?
- 根据 c++ 标准在该宏定义中推送/弹出宏时的行为是什么
- C++ STL 数据结构常时按索引推送/弹出/随机访问,并具有指向元素的可靠指针
- 处理身份验证弹出窗口在wxWebView
- 为什么 std::set 中的项目不能被"弹出"?
- VIsual Studio:避免控制台弹出,而是将其集成到IDE中
- 通过调用 CreateRemoteThread 来弹出 dll:crash
- 为什么当我尝试将priority_queue与参数一起使用作为指向结构的指针时会弹出错误
- 是否可以使用 Wojciech Mula 算法将 __m256i 个 32 位字而不是 4 个 64 位字存储为弹出计数和结果?
- "top"值不会改变我推送或弹出堆栈的次数
- 如何在 C++ 中将从文本文件中读取的元素推送和弹出到数组中,并按 Revserse 顺序输出堆栈?
- 当应用程序在后台运行时,如何弹出QMessageBox