4

システムトレイを利用するQtを使用してC++でアプリケーションを作成しています。例に示すように、QSystemTrayIconクラスを使用してシステムトレイを実装しましたが、コンピューターに存在する他のシステムトレイアイコンと同じ動作はし​​ません。たとえば、Ubuntu 12.04にSpotifyをインストールすると、ドロップダウンメニュー付きのシステムトレイアイコンが表示されます。私のアプリケーションでは、コンテキストメニュー付きのシステムトレイアイコンが表示されます。つまり、メニューをアクティブにするには、右クリックする必要があります。Spotifyでは、アイコンをクリックするだけでメニューが表示されます。Ubuntuでネイティブシステムトレイアイコンを取得するにはどうすればよいですか?組み込みのQt関数ではなく、X11/Linux用の特定のコードを使用しても問題ありません。どうもありがとう。

これが私のコードです:

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

void MainWindow::createActions()
{
    restoreAction = new QAction(tr("&Show"), this);
    connect(restoreAction, SIGNAL(triggered()), this, SLOT(show()));

    quitAction = new QAction(tr("&Exit"), this);
    connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
}

void MainWindow::createTrayIcon()
{
    trayIconMenu = new QMenu(this);
    accountsMenu = trayIconMenu->addMenu(tr("Accounts"));
    trayIconMenu->addSeparator();
    trayIconMenu->addAction(restoreAction);
    trayIconMenu->addSeparator();
    trayIconMenu->addAction(quitAction);

    trayIcon = new QSystemTrayIcon(this);
    trayIcon->setContextMenu(trayIconMenu);
}
4

2 に答える 2

4

QSystemTrayIcon のアクティブなシグナルからメニューをドロップダウンしてみてください。

void Window::iconActivated(QSystemTrayIcon::ActivationReason reason)
 {
     switch (reason) {
         case QSystemTrayIcon::Trigger:
             // show your menu here
     }
 }
于 2012-05-18T05:51:50.683 に答える
1

ここで他の人の利益のためにコメントしています... Ubuntu 12.04 LTSに製品(Qtを使用して構築)を展開したときに同じ問題が発生しました。qt.conf の展開方法を使用します。sni-qt でソースを何度も調べて調べた結果、プラグインを適切に見つける必要があることがわかりました。そのため、ビルド環境からプラグインを作成して、「Plugins =」エントリに対して qt.conf に記載されているアプリケーション パスに関連する plugins ディレクトリにコピーしました。また、sni-qt が更新され、展開された Ubuntu 12.04 マシンにインストールされていることを確認してください。メニューは、他のトレイ アプリケーションと同じように表示されました。32 ビット マシンの /usr/lib/i386-linux-gnu/qt4/plugins/ から、または 64 ビット マシンの同等のパスからプラグインをコピーできます。この問題では、systemtrayicon の下にあるプラグインが必要です。

HTH。

于 2013-10-22T12:09:54.110 に答える