Cam*_*ker 5 c++ linux qt trayicon system-tray
我正在使用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);
}
Run Code Online (Sandbox Code Playgroud)
尝试从QSystemTrayIcon 的激活信号中下拉菜单。
void Window::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
switch (reason) {
case QSystemTrayIcon::Trigger:
// show your menu here
}
}
Run Code Online (Sandbox Code Playgroud)
当我们在 Ubuntu 12.04 LTS 上部署我们的产品(使用 Qt 构建)时,我遇到了同样的问题。
我们采用qt.conf部署的方式。经过大量搜索和浏览源代码后,sni-qt我发现需要正确找出插件。因此,我创建了插件并将其从构建环境复制到相对于条目中提到的我的应用程序路径的插件目录qt.conf中'Plugins = '。
我们还确保它sni-qt是最新的并安装在已部署的 Ubuntu 12.04 计算机上。
菜单的显示方式与其他托盘应用程序的显示方式相同。
您可以从/usr/lib/i386-linux-gnu/qt4/plugins/计算机32 bit或计算机上的等效路径复制插件64 bit。
对于这个问题,systemtrayicon需要用到下面的插件。
HTH。