【问题标题】:QSystemTrayIcon: works in KDE and Windows, but not in Gnome Fallback/XFCEQSystemTrayIcon:适用于 KDE 和 Windows,但不适用于 Gnome Fallback/XFCE
【发布时间】:2017-12-21 21:45:29
【问题描述】:

我有一个小应用程序,它使用 QSystemTrayIcon 在气球中显示信息。它在 Windows 和 KDE 中运行良好,但在 Gnome Fallback 和 XFCE 中却不行。这是单击时在 KDE 中的外观:

这是在 Gnome Fallback 中单击它时发生的情况:它是用鼠标左键单击的,但行为就像是用右键单击它一样,即显示“退出”,当用右键单击时,显示“关于” :

有没有办法让图标在每个 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);
    }
}

【问题讨论】:

  • 可能是一个错误。您使用的是什么版本的 Qt?如果使用 Qt 4,请尝试更新到 4.8.7。如果您可以迁移到 Qt 5 甚至(如果可能的话)迁移到最新版本的 5.6 或 5.9 会更好,因为它们都是 LTS 版本并且是当前唯一支持的 Qt 版本。

标签: qt qt4 system-tray trayicon


【解决方案1】:

回答我自己。在 GNOME 及其衍生产品中,托盘图标唯一支持的操作是上下文菜单,这与 KDE 不同,在 KDE 中,图标也可以通过左键单击来激活。有一个包sni-qt,可以在上下文菜单中添加一个点“激活”。我已经安装了这个包并添加到~/.config/sni-qt.conf

[need-activate-action]
itray

itray 是我的应用程序。所以现在可以通过两次鼠标点击而不是一次点击来完成我想要的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多