2014-04-10 4 views
2

에서 작업 표시 줄/도크 아이콘에서 사용자가 클릭이 나는 스카이프와 같은 기능을 할 OSX, 윈도우, 리눅스Qt는 응용 프로그램

에서 응용 프로그램을 개발하고 있어요 때 이벤트 또는 통지를 가져옵니다. 사용자가 창 닫기를 클릭하면 응용 프로그램이 종료되지 않지만 숨겨집니다. 사용자가 도크 또는 작업 표시 줄에서 appicon을 클릭하면 메인 윈도우가 다시 열립니다.

사용자가 앱 아이콘을 클릭하면 알림 또는 필터 이벤트를 알 수 있습니까?

답변

2

먼저 "창 닫기"버튼을 눌렀을 때 응용 프로그램 창이 닫히지 않아야합니다. 당신이 QMainWindow를 사용하는 것이, 가정 :

class MainWindow : public QMainWindow 
{ 
    // .. constructors, etc. 
    // .. 
protected: 
    void closeEvent(QCloseEvent *) 
    { 
     // Do not close, but hide the window. 
     hide(); 
    } 
}; 

Qt는 작업 표시 줄 아이콘을 처리 할 수있는 전용 클래스가 - QSystemTrayIcon합니다. 이 도움이 될해야

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 

    MainWindow mw; 
    QSystemTrayIcon tray; // needs an icon. 

    // Show the main window when user activates the tray icon. 
    QObject::connect(&tray, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), 
        &mw, SLOT(show())); 
    tray.show(); 

    return app.exec(); 
} 
+0

당신이 vahancho 감사합니다 나는 낮은 사용하여 찾을 ,() 내 응용 프로그램은 활동을 다시 할 수 있습니다 대신 근처의()에 대한 사용자가 작업 표시 줄에서 그것을 클릭 할 때. 그러나 QSystemTrayIcon은 내 응용 프로그램에 새로운 기능을 제공합니다. 감사합니다. –

+0

'closeEvent'를 잘못 사용했습니다. 이 방법은 단순히 창을 닫을 것이라고 알리며 그 작업을 재정의 할 수 없습니다. 윈도우가 닫히지 않게하려면,'event' 메소드를 다시 구현해야합니다. 드롭하고자하는 이벤트의 경우,'true'를 리턴하고 기본 클래스의'event' 메소드를 호출하지 마십시오. –

+1

@KubaOber, 사용법은 잘못이 아니며이를 무시할 수 있습니다. 심지어 문서에서는 "이 함수를 다시 구현하여 위젯이 창 닫기 요청에 응답하는 방식을 변경할 수 있습니다. 예를 들어 모든 이벤트에서 ignore()를 호출하여 창을 닫을 수 없습니다." – vahancho

0

: 같은, 간단한 응용 프로그램이 보일 것이다

void setQuitOnLastWindowClosed(bool quit)