2016-08-15 2 views
3

Qt를 사용하고 있으며 시스템 트레이에서 프로그램을 실행하고 창으로 표시되기를 원합니다.백그라운드에서 프로그램을 실행하여 시스템 트레이에 넣으십시오.

예 : 프로그램을 시작하고 창을 연다 ... 창을 닫지 만 프로그램이 닫히지 않고 여전히 백그라운드에 있습니다. 그런 다음 시스템 트레이에 생성 된 아이콘을 통해 창을 다시 열 수 있습니다.

QSystemTrayIcon을 사용하여 아이콘을 만드는 방법과 아이콘을 마우스 오른쪽 단추로 클릭 할 때 메뉴를 만들고 메뉴를 통해 이벤트를 시작하는 방법을 알고 있습니다. 그러나 나는 프로그램의 창을 닫을 때 프로그램이 백그라운드에서 열려 있도록하는 방법을 모른다.

내 요점을 설명하기 위해 Steam과 동일한 기능을합니다.

+0

가능한 복제 [I가 제대로 Qt를의 기능을 "트레이로 최소화"구현하려면 어떻게합니까?] (HTTP :/

여기에서 가장 흥미로운 부분은 Qt System Tray Icon Example에 자세히 설명되어 있습니다 /stackoverflow.com/questions/3332257/how-do-i-properly-implement-a-minimize-to-tray-function-in-qt) –

+0

@ Torbjörn "최소화"및 "닫기"필요와 정확히 일치하지 않습니다. 약간 다르게 처리 될 것입니다 –

+0

@ms 내가 참조. 그런 다음, 소음에 유감스럽게 생각합니다. –

답변

1

QWidget::closeEvent을 다시 구현하고 을 무시하고 QCloseEvent을 무시해야합니다.

void Window::closeEvent(QCloseEvent *event) 
{ 
    if (trayIcon->isVisible()) { 
     hide(); 
     event->ignore(); 
    } 
} 
+0

문제는 MainWindow 클래스에서 hide 메서드를 호출 할 때 'this'를 사용하여 호출하더라도 창을 숨기지 않는다는 것입니다. 그것은 내가 이벤트를 실제로 얻을 수없는 주 함수에서 hide를 호출하면 작동합니다. – Urefeu

+0

@Urefeu [mcve] –

+0

을 포함하는 새로운 질문을해야합니다. 지금 해결책을 시도 할 수 없습니다. 게다가'hide()'를 호출하면 프로그램 아이콘을 작업 표시 줄에서 제거하지 않습니까? – Urefeu

관련 문제