加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-13 23:02:54 所属栏目:Linux 来源:网络整理
导读:我正在使用Qt编写一个使用系统托盘的应用程序.我已使用QSystemTrayIcon类实现了系统托盘,如示例所示,但它与我的计算机上存在的其他系统托盘图标的行为不同.例如,我在Ubuntu 12.04上安装了Spotify,它显示了一个带有下拉菜单的系统托盘图标.使用我的应用程序,
我正在使用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,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
     }
 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读