我正在使用Qt/C++创建自己的应用程序,希望它能够跨平台。到目前为止,使用Qt一切都很好,唯一的问题在于托盘图标。
我创建了一个托盘图标并添加了一个菜单,这在Windows中可以正常工作,但在Linux中无法工作。我在两台计算机上测试我的应用程序并得到了两个不同的响应。
在我的桌面电脑(Ubuntu 14.04)上,托盘图标出现在任务栏的右侧,但是没有显示菜单。而在笔记本电脑(也是Ubuntu 14.04)上,托盘图标出现在任务栏的左侧,但是在这种情况下,它显示了菜单,并在双击图标时显示了消息。
我不知道是否有其他方法可以解决这个问题,但这是我的代码。
我创建了一个托盘图标并添加了一个菜单,这在Windows中可以正常工作,但在Linux中无法工作。我在两台计算机上测试我的应用程序并得到了两个不同的响应。
在我的桌面电脑(Ubuntu 14.04)上,托盘图标出现在任务栏的右侧,但是没有显示菜单。而在笔记本电脑(也是Ubuntu 14.04)上,托盘图标出现在任务栏的左侧,但是在这种情况下,它显示了菜单,并在双击图标时显示了消息。
我不知道是否有其他方法可以解决这个问题,但这是我的代码。
if (QSystemTrayIcon::isSystemTrayAvailable())
{
//trayicon
trayIcon = new QSystemTrayIcon(this);
trayIcon->setIcon(QIcon(":/Imagenes/iconosPERFQ-23.png"));
trayIcon->setToolTip(tr("PerfQ Client"));
trayIcon->setVisible(true);
connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
//Menu
logoutAction = new QAction(tr("&Logout"), this);
trayIconMenu = new QMenu(this);
trayIconMenu->addAction(logoutAction);
// Add the menu to the trayicon
trayIcon->setContextMenu(trayIconMenu);
connect (logoutAction,SIGNAL(triggered()), this, SLOT(logout()));
}
托盘图标上的激活信号插槽
void Task::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
switch (reason)
{
case QSystemTrayIcon::DoubleClick:
QMessageBox::information(this,"Double Click", "Double click has been press on trayicon");
break;
default:
;
}
}