无法从QApplication连接aboutToQuit信号

时间:2014-11-25 23:59:09

标签: c++ qt qt5 signals-slots qapplication

我有一个Qt应用程序,我想在系统托盘中显示。 我希望的行为是,如果用户单击应用程序的关闭按钮,则该应用程序隐藏在系统托盘中但不会退出。

main.cpp中的代码是:

 if (QSystemTrayIcon::isSystemTrayAvailable())
  {
    QObject *root = engine.rootObjects().at(0);
    QQuickWindow *window = qobject_cast<QQuickWindow *>(root);
    QAction *showAction = new QAction(QObject::tr("Show"), window);
    window->connect(showAction, SIGNAL(triggered()), window, SLOT(show()));
    QAction *hideAction = new QAction(QObject::tr("Hide"), window);
    window->connect(hideAction, SIGNAL(triggered()), window, SLOT(hide()));
    QAction *quitAction = new QAction(QObject::tr("&Quit"), window);
    window->connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
    QObject::connect(qApp,SIGNAL(aboutToQuit()),window,SLOT(hide()));

    QMenu *trayIconMenu = new QMenu();
    trayIconMenu->addAction(showAction);
    trayIconMenu->addAction(hideAction);
    trayIconMenu->addSeparator();
    trayIconMenu->addAction(quitAction);

    QSystemTrayIcon *trayIcon = new QSystemTrayIcon(window);
    trayIcon->setContextMenu(trayIconMenu);
    trayIcon->setToolTip("xxx");
    trayIcon->setIcon(QIcon("xxx.png"));
    trayIcon->show();
   }

现在我无法连接aboutToQuit信号并将应用程序隐藏在托盘中,即 QObject::connect(qApp,SIGNAL(aboutToQuit()),window,SLOT(hide()));行不正确,但我没有收到任何错误等。 除此之外一切都正常。有人请告诉我我做错了什么,我怎样才能实现我想要的行为。 我还想知道我是否有正确的连接信号,或者是否应该尝试连接其他信号。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

您可以使用:

qApp()->setQuitOnLastWindowClosed(false);
默认情况下,

quitOnLastWindowClosed属性为true,这会导致应用程序在最后一个窗口关闭时退出。通过将其设置为false,关闭主窗口时应用程序不会终止。

您还可以重新实现主要小部件的closeEvent,忽略关闭事件并隐藏窗口:

void MainWindow::closeEvent(QCloseEvent * e)
{
    e->ignore();
    this->hide();
}