시스템 트레이에 표시하려는 Qt 응용 프로그램이 있습니다. 원하는 동작은 사용자가 응용 프로그램의 닫기 단추를 클릭하면 해당 응용 프로그램보다 시스템 트레이에 숨겨 지지만 종료되지 않습니다.QApplication에서 aboutToQuit 신호를 연결할 수 없습니다.
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();
}
은 내가 QObject::connect(qApp,SIGNAL(aboutToQuit()),window,SLOT(hide()));
라인, 즉 트레이에 응용 프로그램을 aboutToQuit
신호를 연결하고 숨길 수 아니다 올바르지 않습니다하지만 난 오류를 받고 있지 않다 등 이 외에도 모든 것이 올바르게 작동하고 있습니다. 누군가 내가 뭘 잘못하고 있으며 원하는 동작을 어떻게 달성 할 수 있는지 말해주십시오. 연결 신호가 올바른지 또는 다른 신호에 연결해야하는지 여부를 알고 싶습니다. 미리 감사드립니다.
왜 당신이 연결이 작동하지 않는 생각하십니까? 리턴 코드를 점검해야합니다. 그러나 어쨌든 앱을 종료하는 데 아무 것도하지 않았습니다. –
내가 종료 할 때 앱을 멈추기 위해해야 할 일을 알려주시겠습니까? 사용자가 닫기 버튼을 클릭하면 시스템 트레이에 숨기를 원합니다. – bourne
@Nejat의 답변보기 - 당신의 가까운 이벤트를 차단해야합니다. 마지막 창을 닫고 닫히지 않도록합니다 (대신 시스템 트레이에 숨김). 또는 마지막 창을 닫을 때 종료합니다. –