Не удалось подключиться к сигналу aboutToQuit из 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

Решение

Ты можешь использовать :

qApp()->setQuitOnLastWindowClosed(false);

quitOnLastWindowClosed свойство имеет значение true по умолчанию, что приводит к закрытию приложения при закрытии последнего окна. Если установить значение false, приложение не будет закрываться при закрытии главного окна.

Вы также можете переопределить closeEvent вашего основного виджета, игнорируйте событие close и просто скройте свое окно:

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

Другие решения


По вопросам рекламы [email protected]