Qt 5.3 QSystemTrayIcon 无法正常工作[Linux]

Posted

技术标签:

【中文标题】Qt 5.3 QSystemTrayIcon 无法正常工作[Linux]【英文标题】:Qt 5.3 QSystemTrayIcon not working correctly[Linux] 【发布时间】:2014-06-23 19:37:57 【问题描述】:

所以我写了一些 Qt5 应用程序并想用 QSystemTrayIcon 添加一个系统托盘图标。完成编码后,我编译并运行它并没有出现系统托盘图标,所以我测试了一下,添加了一行,因此它会显示一个信息气泡,它确实如此,但在左上角,而不是在系统托盘。

无论如何,我尝试了 Qt4.8,编译了相同的代码,并且运行良好。

我正在使用带有最新更新的 Arch linux,XFCE4 作为 DE 和 Qt 5.3.0-3。我使用 Qt Creator 制作了应用程序。

我编写了一个具有相同行为的示例应用程序。 代码如下:

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSystemTrayIcon>
#include <QIcon>
#include <QMenu>

namespace Ui 
class MainWindow;


class MainWindow : public QMainWindow

    Q_OBJECT

    QSystemTrayIcon *trayIcon;
    QMenu *trayMenu;
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
;

#endif // MAINWINDOW_H

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)

    ui->setupUi(this);

    trayMenu = new QMenu(this);
    trayMenu->addAction("Test");

    trayIcon = new QSystemTrayIcon(this);
    trayIcon->setIcon(QIcon(":/ui_conf.png"));
    trayIcon->setContextMenu(trayMenu);

    trayIcon->show();
    trayIcon->showMessage("Well...", "Here I should be I guess?");

    ui->pushButton->setIcon(QIcon(":/ui_conf.png"));


MainWindow::~MainWindow()

    delete ui;


void MainWindow::on_pushButton_clicked()

    this->close();

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])

    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();

提前致谢!

【问题讨论】:

【参考方案1】:

这是 Qt 5.x 版本的回归(错误)。这是它的错误记录https://bugreports.qt.io/browse/QTBUG-31762它仍然是开放的:(

您可以在 Qt 应用程序中尝试使用 gtk 代码来创建工作系统托盘图标/菜单。

【讨论】:

【参考方案2】:

代码对我来说看起来很可靠,但在某些 Linux 发行版中看起来 QSystemTrayIcon 存在问题。查看此链接以获取更多信息: http://www.qtcentre.org/threads/56459-QSystemTrayIcon-and-linux

【讨论】:

hm 是的,但奇怪的是,在 Qt 4.8 中,它在相同的代码下工作得很好。我还读到在 Qt 5.1 和 5.2 beta 之间引入了错误,但显然已修复,现在又重新引入了?编辑:如果您这么友好,您能否在您的机器上使用 Qt 5.3 编译代码并告诉我它是否有效以及您使用什么 DE 和发行版? 其实我现在还没有linux盒子,抱歉:(

以上是关于Qt 5.3 QSystemTrayIcon 无法正常工作[Linux]的主要内容,如果未能解决你的问题,请参考以下文章

Qt QSystemTrayIcon未发送激活信号

有啥方法可以通过 Qt Designer 添加 QSystemTrayIcon

QT之Qml使用QSystemTrayIcon实现系统托盘

新的拖放机制在 Qt-Quick (Qt 5.3) 中无法按预期工作

Qt Linux 下 <QWidget> <QSystemTrayIcon> <QLabel> 等头文件包含时 No such file or directory

Qt 系统托盘(加hover效果)