我有一个
QMainWindow
可以最小化到托盘。在托盘中我有两个鼠标右键菜单。显示/隐藏并退出。
当窗口可见并且我单击退出菜单时,应用程序将正确关闭。
当窗口不可见(隐藏)时,应用程序保持打开状态。
问题不在
MainWindow::CloseEvent()
。根据调试器的信息 - 应用程序正确进入 closeEvent
函数,但不会结束。
我做错了什么吗?这是一个功能还是一个错误? 我尝试在退出前先放
this->show()
,但对结果没有影响。
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
...
/* try icon */
trayIcon = new QSystemTrayIcon(this);
trayIcon->setIcon(this->style()->standardIcon(QStyle::SP_ComputerIcon));
trayIcon->setToolTip("Tray Program.\nWorking with minimizing the tray program.");
menu = new QMenu(this);
viewWindow = new QAction(("Maximize window"), this);
quitAction = new QAction(("Exit"), this);
connect(viewWindow, SIGNAL(triggered()), this, SLOT(show()));
connect(quitAction, SIGNAL(triggered()), this, SLOT(closeFromTray()));
closedFromTray = false;
menu->addAction(viewWindow);
menu->addAction(quitAction);
trayIcon->setContextMenu(menu);
trayIcon->show();
connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
...
}
void MainWindow::closeEvent(QCloseEvent * event)
{
if(!closedFromTray)
{
this->hide();
event->ignore();
}
else
{
event->accept();
}
QMainWindow::closeEvent(event);
}
void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
switch (reason)
{
case QSystemTrayIcon::Trigger:
if(!this->isVisible())
{
this->show();
}
else
{
this->hide();
}
break;
default:
break;
}
}
void MainWindow::closeFromTray()
{
closedFromTray = true;
close();
}
即使窗口隐藏,如何终止应用程序?
我变了
void MainWindow::closeFromTray()
{
closedFromTray = true;
close();
}
到
void MainWindow::closeFromTray()
{
QCoreApplication::quit();
}
来自QGuiApplication::quitOnLastWindowClosed,我强调:
如果此属性为 true,则当最后一个 visible primary window(即没有瞬态父窗口的顶级窗口)关闭时,应用程序将退出。”. .
qApp->quit();
代替 close();
。