CloseEvent 不会关闭隐藏的主窗口

问题描述 投票:0回答:2

我有一个

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();
}
  • Qt 创建者 11.0.2.
  • Qt 6.5.2 包含所有最新更新。

即使窗口隐藏,如何终止应用程序?

qt show-hide qsystemtrayicon
2个回答
0
投票

我变了

void MainWindow::closeFromTray()
{
    closedFromTray = true;
    close();
}

void MainWindow::closeFromTray()
{
    QCoreApplication::quit();
}

0
投票

来自QGuiApplication::quitOnLastWindowClosed,我强调:

如果此属性为 true,则当最后一个 visible primary window(即没有瞬态父窗口的顶级窗口)关闭时,应用程序将退出。”. .

使用

qApp->quit();
代替
close();

© www.soinside.com 2019 - 2024. All rights reserved.