QSystemTrayIcon:适用于KDE和Windows,但不适用于Gnome Fallback/XFCE
问题描述:
我有一个使用QSystemTrayIcon在气球中显示信息的小应用程序。它在Windows和KDE中工作正常,但不在Gnome Fallback和XFCE中。下面是它的外观在KDE点击时:QSystemTrayIcon:适用于KDE和Windows,但不适用于Gnome Fallback/XFCE
这里是什么在Gnome的后备点击它的时候发生的事情:被点击鼠标左键,但行为就像它与单击鼠标右键,即显示“退出”,并且当右键点击,显示“关于”:
有没有一种方法,使每一个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);
}
}
答
回答对自己处理鼠标事件。在GNOME及其衍生产品中,托盘图标唯一支持的操作是上下文菜单,与KDE不同,该图标也可以通过左键单击来激活。有一个包sni-qt,可以添加一个点“激活”的上下文菜单。我已经安装了这个包,并添加到~/.config/sni-qt.conf
:
[need-activate-action]
itray
其中itray
是我的应用程序。所以现在可以通过两次鼠标点击来完成我想要的操作,而不是一次。
它_might_可能是一个错误。你使用的是什么版本的Qt?如果使用Qt 4,请尝试更新到4.8.7。如果你可以转移到Qt 5甚至可能的话,到5.6或5.9的最新版本,那将会更好,因为它们都是LTS版本,并且是目前唯一支持的Qt版本。 –