2012-05-18 2 views
3

J'écris une application en C++ avec Qt qui utilise la barre d'état système. J'ai implémenté la barre d'état système à l'aide d'une classe QSystemTrayIcon comme indiqué dans les exemples, mais elle n'a pas le même comportement que les autres icônes de la barre d'état système présentes sur mon ordinateur. Par exemple, j'ai Spotify installé sur Ubuntu 12.04 et il affiche une icône de la barre d'état système avec un menu déroulant. Avec mon application, il affiche une icône de la barre d'état système avec un menu contextuel, ce qui signifie que vous devez cliquer avec le bouton droit pour activer le menu. Avec Spotify, tout ce qui doit être fait est de cliquer sur l'icône et le menu s'affichera. Que puis-je faire pour obtenir des icônes de la barre système natives dans Ubuntu? Je suis d'accord avec l'utilisation de code spécifique pour X11/Linux et pas les fonctions Qt intégrées. Merci beaucoup.Application de la barre d'état système Linux Qt/C++

Voici mon code:

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); 
} 

Répondre

4

Essayez de menu déroulant à partir activated signal QSystemTrayIcon.

void Window::iconActivated(QSystemTrayIcon::ActivationReason reason) 
{ 
    switch (reason) { 
     case QSystemTrayIcon::Trigger: 
      // show your menu here 
    } 
} 
+0

Ceci montrera le menu, mais il montre seulement un menu de contexte et je veux qu'il montre un menu de non-contexte. Je pense que cela pourrait avoir quelque chose à voir avec Unity, mais je ne suis pas sûr à 100%. –

+0

Je vais marquer votre réponse comme la bonne réponse, mais j'aimerais quand même savoir comment lier le système de menu global d'Ubuntu. Qt 4.8.1 ne semble pas utiliser le système de menu global par défaut et je ne trouve pas le paramètre pour l'activer dans les builds. –

+0

Qu'entendez-vous par «système de menu global»? Menu qui habituellement dans le coin supérieur gauche de la fenêtre qui dans ubuntu en haut de l'écran? – graphite

0

Je commentais au profit des autres ici ... Je eu le même problème lorsque nous avons déployé notre produit (construit en utilisant Qt) sur Ubuntu 12.04 LTS. Nous utilisons le mode de déploiement qt.conf. Après beaucoup de chasse et en passant par la source sur sni-qt, j'ai trouvé que les plugins doivent être correctement identifiés. J'ai donc créé et copié les plugins de notre environnement de construction dans le répertoire plugins relatif à mon chemin d'application mentionné dans qt.conf par rapport à l'entrée 'Plugins ='. Assurez-vous également que sni-qt est mis à jour et installé sur la machine Ubuntu 12.04 déployée. Les menus sont apparus tels qu'ils apparaissent pour d'autres applications de bacs. Vous pouvez copier des plugins depuis/usr/lib/i386-linux-gnu/qt4/plugins/sur une machine 32 bits ou son chemin équivalent sur une machine 64 bits. Pour ce problème, le plugin sous systemtrayicon est le requis.

HTH.

Questions connexes