0

QSystemTrayIcon モジュールを別のスレッドに移動しようとしています。アプリケーションの実行中に以下のエラーが発生します。Initialize() メソッドの addAction がエラーの原因です。

QWidget: QPaintDevice の前に QApplication を構築する必要があります

私のサンプルコードスニペット:

グローバル変数 QMenu myMenu を宣言しました。

ヘッダファイルのメンバ変数 QAction* openFile;

コンストラクタで openFile = new QAction(parent);

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

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

2 に答える 2

0

あなたはこの問題に逆向きに取り組んでいます。「一部の機能がバックグラウンドで実行されている場合、TrayIcon メニューが表示されない」という理由は、プロセスの完了後にメニューが表示されます。物事を待っているときにGUIスレッドをブロックしているためです。何かを待って GUI スレッドをブロックしないでください。Qt のほとんどは、物事が完了したとき (成功または失敗したとき) に発火するシグナルを提供します。これらは、使用すべきノンブロッキング API です。

于 2012-06-01T08:13:52.607 に答える
0

メイン スレッドの外部で GUI 関連のクラスを使用してはなりませ。いいえ、回避策はありません。QApplicationQSystemTrayIcon

于 2012-05-10T18:39:16.510 に答える