2017-07-17 93 views
1

我有一個使用QSystemTrayIcon在氣球中顯示信息的小應用程序。它在Windows和KDE中工作正常,但不在Gnome Fallback和XFCE中。下面是它的外觀在KDE點擊時:QSystemTrayIcon:適用於KDE和Windows,但不適用於Gnome Fallback/XFCE

enter image description here

這裏是什麼在Gnome的後備點擊它的時候發生的事情:被點擊鼠標左鍵,但行爲就像它與單擊鼠標右鍵,即顯示「退出」,並且當右鍵點擊,顯示「關於」:

enter image description here

有沒有一種方法,使每一個DE圖標的工作?

下面是代碼:

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

它_might_可能是一個錯誤。你使用的是什麼版本的Qt?如果使用Qt 4,請嘗試更新到4.8.7。如果你可以轉移到Qt 5甚至可能的話,到5.6或5.9的最新版本,那將會更好,因爲它們都是LTS版本,並且是目前唯一支持的Qt版本。 –

回答

0

也許你需要使用event filter, 它允許你安裝一個事件過濾器,並從那裏

0

回答對自己處理鼠標事件。在GNOME及其衍生產品中,托盤圖標唯一支持的操作是上下文菜單,與KDE不同,該圖標也可以通過左鍵單擊來激活。有一個包sni-qt,可以添加一個點「激活」的上下文菜單。我已經安裝了這個包,並添加到~/.config/sni-qt.conf

[need-activate-action] 
itray 

其中itray是我的應用程序。所以現在可以通過兩次鼠標點擊來完成我想要的操作,而不是一次。

相關問題