【发布时间】:2012-07-18 17:23:55
【问题描述】:
我使用的是 Ubuntu 12.04,虽然我可以创建带有可用菜单的托盘图标,但我无法控制其操作:
trayIcon = new QSystemTrayIcon(this);
trayIcon->setIcon(QIcon(":/icons/Pictures/icon.png"));
trayIcon->setToolTip(QString("Hello there..."));
connect(trayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(clickSysTrayIcon(QSystemTrayIcon::ActivationReason)));
connect(this,SIGNAL(minimized()),this,SLOT(hide()),Qt::QueuedConnection);
QMenu *changer_menu = new QMenu;
Show_action = new QAction(tr("S&how"),this);
Show_action->setIconVisibleInMenu(true);
connect(Show_action, SIGNAL(triggered()), this, SLOT(showClicked()));
changer_menu->addAction(Show_action);
changer_menu->addSeparator();
Quit_action = new QAction(tr("&Quit"), this);
Quit_action->setIconVisibleInMenu(true);;
connect(Quit_action, SIGNAL(triggered()), this, SLOT(close_minimize()));
changer_menu->addAction(Quit_action);
trayIcon->setContextMenu(changer_menu);
trayIcon->show();
clickSysTrayIcon(QSystemTrayIcon::ActivationReason) 如下:
void MainWindow::clickSysTrayIcon(QSystemTrayIcon::ActivationReason reason)
{
//reason is a variable that holds the type of activation or click done on the icon tray
qDebug() << "I'm in!";
}
并且,在头文件中定义为:
private Q_SLOTS:
void clickSysTrayIcon(QSystemTrayIcon::ActivationReason reason);
但是,我无法听到“我加入了!”要显示的消息。我尝试通过左/右键单击、中键单击和鼠标滚轮使其工作,但我从未看到输出此消息。
怎么了?
编辑:特定系统 Ubuntu 12.04 似乎出了点问题,因为它不再使用托盘图标而仅使用指示器。因此,有一个程序使用托盘图标并将它们转换为指标。但是,然后指标的功能就消失了。我知道这是系统的错,因为相同的程序,在相同的代码下,在 Lubuntu 12.04 和 LXDE 桌面下完美运行。
我为此责怪 Ubuntu。 sni-qt 包没有很好地从托盘图标迁移到指示器,前提是指示器可以在点击、滚轮等上进行交互。真可惜! 这个问题有什么解决办法吗?
我的赏金结束了,所以如果有人可以解决这个问题,我将不胜感激!
【问题讨论】:
-
您是否有调试器输出或其他可能涉及问题源的内容?
-
我没有得到你想要的?
-
你是否收到一些调试输出(错误等)我已经测试过它,但它也适用于 Kubuntu,所以我无法重现问题。
-
我在 Lubuntu 下对其进行了测试,效果也很好。但是在 ubuntu 上它失败了,因为它有 sni-qt 包,它可以转换“托盘图标”->“指示器”,但是托盘图标失去了一些我上面描述的功能。我的意思是它只是变成了一个没有任何功能的简单的可点击指示器。 K/Xubuntu 等其他发行版不使用 sni-qt 包,也接受托盘图标。
-
我知道 Ubuntu 决定基于 Gnome 编写他们的 GUI,这引起了很多与之相关的问题。据我所知,这是一个已确认的错误,有些人成功删除了该软件包 - sni-qt。我不知道它是否适用于你的情况。