QSystemTrayIcon:适用于 KDE 和 Windows,但不适用于 Gnome Fallback/XFCE
QSystemTrayIcon: works in KDE and Windows, but not in Gnome Fallback/XFCE
我有一个使用 QSystemTrayIcon 在气球中显示信息的小应用程序。它在 Windows 和 KDE 中工作正常,但在 Gnome Fallback 和 XFCE 中不工作。单击时它在 KDE 中的外观如下:
这是在 Gnome Fallback 中单击它时发生的情况:它是用鼠标左键单击的,但它的行为就像用右键单击一样,即显示 "Exit",当用鼠标右键单击时,显示 "About":
有没有办法让图标在每个 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 不同,在 KDE 中图标也可以通过左键单击激活。有一个包 sni-qt,可以在上下文菜单中添加一个点 "Activate"。我已经安装了这个包并添加到 ~/.config/sni-qt.conf
:
[need-activate-action]
itray
其中 itray
是我的应用程序。所以现在只需点击两次鼠标就可以完成我想做的事情,而不是一次。
我有一个使用 QSystemTrayIcon 在气球中显示信息的小应用程序。它在 Windows 和 KDE 中工作正常,但在 Gnome Fallback 和 XFCE 中不工作。单击时它在 KDE 中的外观如下:
这是在 Gnome Fallback 中单击它时发生的情况:它是用鼠标左键单击的,但它的行为就像用右键单击一样,即显示 "Exit",当用鼠标右键单击时,显示 "About":
有没有办法让图标在每个 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 不同,在 KDE 中图标也可以通过左键单击激活。有一个包 sni-qt,可以在上下文菜单中添加一个点 "Activate"。我已经安装了这个包并添加到 ~/.config/sni-qt.conf
:
[need-activate-action]
itray
其中 itray
是我的应用程序。所以现在只需点击两次鼠标就可以完成我想做的事情,而不是一次。