我正在使用Qt编写一个使用系统托盘的C ++应用程序。我已使用QSystemTrayIcon类实现了系统托盘,如示例所示,但它与我的计算机上存在的其他系统托盘图标的行为不同。例如,我在Ubuntu 12.04上安装了Spotify,它显示了一个带有下拉菜单的系统托盘图标。使用我的应用程序,它会显示带有上下文菜单的系统托盘图标,这意味着您必须右键单击它才能激活菜单。使用Spotify,所有需要做的就是点击图标,菜单就会显示出来。如何在Ubuntu中获取本机系统托盘图标?我可以使用X11 / Linux的特定代码,而不是内置的Qt函数。非常感谢。
这是我的代码:
void MainWindow::closeEvent(QCloseEvent *event)
{
if (trayIcon->isVisible()) {
hide();
event->ignore();
}
}
void MainWindow::createActions()
{
restoreAction = new QAction(tr("&Show"), this);
connect(restoreAction, SIGNAL(triggered()), this, SLOT(show()));
quitAction = new QAction(tr("&Exit"), this);
connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
}
void MainWindow::createTrayIcon()
{
trayIconMenu = new QMenu(this);
accountsMenu = trayIconMenu->addMenu(tr("Accounts"));
trayIconMenu->addSeparator();
trayIconMenu->addAction(restoreAction);
trayIconMenu->addSeparator();
trayIconMenu->addAction(quitAction);
trayIcon = new QSystemTrayIcon(this);
trayIcon->setContextMenu(trayIconMenu);
}
答案 0 :(得分:4)
尝试从QSystemTrayIcon的activated信号下拉菜单。
void Window::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
switch (reason) {
case QSystemTrayIcon::Trigger:
// show your menu here
}
}
答案 1 :(得分:0)
我在这里评论其他人的好处...... 当我们在Ubuntu 12.04 LTS上部署我们的产品(使用Qt构建)时,我遇到了同样的问题。 我们使用qt.conf部署方式。 经过大量的狩猎并经过sni-qt的源代码后,我发现需要正确找到插件。所以我创建并将插件从我们的构建环境复制到插件目录,相对于我在qt.conf中提到的针对'Plugins ='条目的应用程序路径。还要确保在部署的Ubuntu 12.04计算机上更新并安装了sni-qt。菜单显示为其他托盘应用程序。 您可以在32位计算机或64位计算机上的等效路径上复制/ usr / lib / i386-linux-gnu / qt4 / plugins /中的插件。对于这个问题,systemtrayicon下的插件是必需的插件。
HTH。