当应用程序在后台运行时,如何弹出QMessageBox

How to pop up QMessageBox when the application is running in background?

本文关键字:何弹出 QMessageBox 运行时 应用程序 后台      更新时间:2023-10-16

我一直在开发一个处理视频处理的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();