Qt 5.3 QSystemTrayIcon 在Linux下无法正常工作

4
我写了一些Qt5应用程序,并想使用QSystemTrayIcon添加系统托盘图标。在编码完成后,我进行了编译和运行,但系统托盘图标没有出现,于是我进行了测试,添加了一行代码以显示信息气泡,它确实显示了,但是出现在左上角,而不是在系统托盘中。
无论如何,我尝试了Qt4.8,编译了相同的代码,那里它可以正常工作。
我正在使用更新的Arch Linux,XFCE4作为桌面环境,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();
}

提前感谢您!

2个回答

3

这是Qt 5.x版本中的一个回归(错误)。这里是有关此错误的记录:https://bugreports.qt.io/browse/QTBUG-31762,但它仍然未解决 :(

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


0

嗯,是的,但奇怪的是,在Qt 4.8中,使用相同的代码可以正常工作。我还读到说,在Qt 5.1和5.2 beta之间引入了这个错误,但显然已经修复,现在又重新引入了?编辑:如果您愿意的话,能否在您的机器上使用Qt 5.3编译代码,并告诉我它是否正常工作以及您使用的DE和发行版是什么? - rfreytag
我现在实际上没有Linux电脑,抱歉:( - Lucidic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接