2012-05-10 2 views
0

QSystemTrayIcon 모듈을 별도의 스레드로 이동하려고합니다. 응용 프로그램을 실행하는 동안 아래 오류가 나타납니다. 오류를 야기하는 Initialize() 메소드 addAction.QMenu QThread 구현 오류

는 QWidget은 : 전역 변수 QMenu를 내 메뉴 선언

;

내 샘플 코드 조각 QPaintDevice 전에의 QApplication을 구성해야

헤더 파일의 멤버 변수 QAction * openFile;

생성자에서 openFile = new QAction (parent); 당신은 는 메인 스레드 외부의 GUI 관련 클래스를 사용해서는 안

Initialize() 
{ 
myMenu.addAction(openFile); 
} 

void myApp::run() 
{ 
    Initialize() 
} 

답변

0

, 즉 하나의 QApplication을 만들었습니다. 따라서 별도의 스레드에서 QSystemTrayIcon 물건을 이동할 수 없습니다. 아니요, 해결 방법은 없습니다.

+0

나쁜 소식 .. QSystemTrayIcon을 성능 문제 때문에 별도의 스레드로 옮기고 싶습니다. – Kolappan

+0

@Kolappan 어떤 성능 문제가 있습니까? – lunaryorn

+0

일부 기능이 백그라운드에서 실행중인 경우 TrayIcon 메뉴가 표시되지 않습니다. 프로세스 완료 후 메뉴가 표시됩니다. 우리의 응용 프로그램은 단일 스레드 응용 프로그램입니다. – Kolappan

0

이 문제는 거꾸로 나타납니다. "일부 기능이 백그라운드 메뉴에서 실행중인 경우 TrayIcon 메뉴가 표시되지 않는 것은 프로세스 완료 후 표시됩니다." 기다릴 때 GUI 스레드를 차단하고 있기 때문입니다. 기다리는 것으로 GUI 스레드를 차단하지 마십시오. 대부분의 Qt는 일이 성취 될 때 (성공하거나 실패 할 때) 발사되는 신호를 제공합니다. 그것들은 당신이 사용해야하는 nonblocking API입니다.