2017-07-17 8 views
1

J'ai une petite application qui utilise QSystemTrayIcon pour afficher les informations dans le ballon. Cela fonctionne très bien dans Windows et dans KDE, mais pas dans Gnome Fallback et XFCE. Voici à quoi il ressemble dans KDE lorsque vous cliquez dessus:QSystemTrayIcon: fonctionne dans KDE et Windows, mais pas dans Gnome Fallback/XFCE

enter image description here

Et voici ce qui se passe lorsque l'on clique dans Gnome Repli: il est cliqué avec le bouton gauche de la souris, mais se comporte comme il a été cliqué avec le bouton droit, à savoir montre « Exit », et lorsque vous cliquez dessus avec le bouton droit, montre « a propos »:

enter image description here

est-il un moyen de faire fonctionner l'icône dans chaque dE?

Voici le code:

MyTray::MyTray(QObject *parent) : 
     QObject(parent) 
{ 
//.......... 
    menu.addAction(new QAction("Выход",this)); 
    connect(menu.actions()[0],SIGNAL(triggered()),this,SLOT(delete_itself())); 
    icn=QIcon(":new/prefix1/08-01.png"); 
    icon.setIcon(icn); 
    icon.setContextMenu(&menu); 
    connect(&icon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(icon_clicked(QSystemTrayIcon::ActivationReason))); 
    icon.show(); 
//.......... 
} 
void MyTray::icon_clicked(QSystemTrayIcon::ActivationReason reason) 
{ 
    if(reason==QSystemTrayIcon::Trigger) 
    { 
     QString s; 
     for(int i=0;i<vec.count();i++) 
     { 
      s.append(vec[i].room); 
      s.append(vec[i].isOpen ? ": открыт" : ": закрыт"); 
      if(vec.count()-1>i) s.append("\n"); 
     } 
     QSystemTrayIcon::MessageIcon ic = QSystemTrayIcon::MessageIcon(QSystemTrayIcon::Information); 
     icon.showMessage("Состояние",s,ic,20000); 
    } 
} 
+0

Cela pourrait être un bug. Quelle version de Qt utilisez-vous? Si vous utilisez Qt 4, essayez de mettre à jour vers 4.8.7. Ce serait encore mieux si vous pouviez passer à Qt 5 et même, si possible, à la dernière version de 5.6 ou 5.9, car elles sont toutes deux des versions LTS et sont les seules versions actuellement supportées de Qt. –

Répondre

0

Peut-être que vous devez utiliser event filter, il ne vous permet d'installer un filtre d'événements et gérer les événements de souris à partir de là

0

Répondre à moi-même. Dans GNOME et ses dérivés, la seule action prise en charge pour l'icône de la barre d'état est le menu contextuel, contrairement à KDE où l'icône peut également être activée par un clic gauche. Il y a un paquet sni-qt, qui peut ajouter un point "Activer" au menu contextuel. J'ai installé ce paquet et ajouté à ~/.config/sni-qt.conf:

[need-activate-action] 
itray 

itray est mon application. Alors maintenant, il est possible de faire ce que je voulais en deux clics de souris au lieu d'un.