无法连接来自 QApplication 的 aboutToQuit 信号
Posted
技术标签:
【中文标题】无法连接来自 QApplication 的 aboutToQuit 信号【英文标题】:Not able to connect aboutToQuit signal from QApplication 【发布时间】:2014-11-25 23:59:08 【问题描述】:我有一个想要在系统托盘中显示的 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】:你可以使用:
qApp()->setQuitOnLastWindowClosed(false);
quitOnLastWindowClosed
属性默认为 true,这会导致您的应用程序在最后一个窗口关闭时退出。通过将其设置为 false,您的应用程序不会在您关闭主窗口时终止。
您还可以重新实现主小部件的closeEvent
,忽略关闭事件并隐藏您的窗口:
void MainWindow::closeEvent(QCloseEvent * e)
e->ignore();
this->hide();
【讨论】:
如何使用 closeEvent(QCloseEvent * e) 阻止应用程序退出?有可能吗?以上是关于无法连接来自 QApplication 的 aboutToQuit 信号的主要内容,如果未能解决你的问题,请参考以下文章
电脑一键重装糸统出现write protect error reading drive C Abo