系统相关
首页 > 系统相关> > 系统托盘应用程序Linux Qt / C.

系统托盘应用程序Linux Qt / C.

作者:互联网

我正在使用Qt编写一个使用系统托盘的应用程序.我已使用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);
}

解决方法:

尝试从QSystemTrayIcon的activated信号下拉菜单.

void Window::iconActivated(QSystemTrayIcon::ActivationReason reason)
 {
     switch (reason) {
         case QSystemTrayIcon::Trigger:
             // show your menu here
     }
 }

标签:c-2,linux,qt,system-tray,trayicon
来源: https://codeday.me/bug/20190626/1290447.html