5

アプリのシステムトレイアイコンを設定し、それにシンプルなコンテキストメニューを添付しました。アイコンを右クリックしてコンテキストメニューを表示すると、正常に機能します。次に、アプリのフォーカスを失う場所(タスクバーや別のアプリなど)をクリックしても、コンテキストメニューは削除されず、クリックすると正しいアクションがトリガーされます。ただし、メインアプリをクリックすると、コンテキストメニューが期待どおりに消えます。

トレイアイコンとコンテキストメニューを作成するための関連コードは次のとおりです-

actionExit = new QAction( "Exit", this );
connect( actionExit, SIGNAL( triggered() ), this, SLOT( ExitClient() ));

myTrayIconMenu = new QMenu( this );
myTrayIconMenu->addAction( actionExit );

trayIcon = new QSystemTrayIcon( icon, this );
trayIcon->setContextMenu( myTrayIconMenu );
connect( systrayIcon, SIGNAL( activated( QSystemTrayIcon::ActivationReason )), 
         this, SLOT( ToggleVisibility( QSystemTrayIcon::ActivationReason )));
trayIcon->show( );

コンテキストメニューを手動で非表示にできるように、アプリがフォーカスを失うことをテストする独自のコードを追加する必要がありますか?私はこの機能が組み込まれると思っていました。

[この問題はWindows7で発生しており、Qtプラグインを介してVisual Studio2010Proでコンパイルされています。他のOSではテストしていません]

APIドキュメントでこれに気づきました-

注:システムトレイアイコンはメニューの所有権を取得しません。たとえば、適切な親オブジェクトを使用してメニューを作成することにより、適切なタイミングで削除されるようにする必要があります。

使用する場合

myTrayIconMenu = new QMenu( );

それ以外の

myTrayIconMenu = new QMenu( this );

アプリがフォーカスを失うと、コンテキストメニューは削除されます。ただし、コンテキストメニューを手動で削除する必要があります。

他の人はこの状況にどのように対処しましたか?

4

4 に答える 4

2

QWidget の代わりに QApplication 派生クラスに QSystemTrayIcon を実装すると、この問題を解決できます。

main.cpp:

int main(int argc, char *argv[])
{
    return TestApp(argc, argv).exec();
}

testApp.cpp:

TestApp::TestApp(int &argc, char **argv) :
    QApplication(argc, argv)
{
    quitAction = new QAction("quit", this);
    connect(quitAction, SIGNAL(triggered()), this, SLOT(quit()));
    systemTrayMenu = new QMenu("tray menu");
    systemTrayMenu->addAction(quitAction);

    trayIcon = new QSystemTrayIcon( this);
    trayIcon -> setToolTip("test app");
    connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
            this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
    trayIcon -> setContextMenu(systemTrayMenu);
    trayIcon -> show();
}
于 2012-10-11T10:11:02.677 に答える
0

aboutToHide()メニューの削除を処理するために信号をdeleteLater()スロットに接続できます

于 2011-05-25T10:42:52.483 に答える
0

使用しているコンパイラを教えてください。私も以前はこの問題を抱えていたと思います。さらに、その他のトレイ アイコン関連の問題 (メニューが影しか表示されない、メニューがタスク バーの下で動かなくなるなど)。

Mingw32 から Visual Studio 2008 コンパイラに切り替えて以来、もう気にすることはありません。他の誰かがこれについて詳しく説明できるかもしれません (私は Windows 開発の専門家ではないため)。

于 2011-05-24T19:58:06.517 に答える
0

このバグによると、この問題は Qt 4.8.0 で解決されるようです。

于 2011-11-23T15:05:38.993 に答える