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

时间:2014-06-23 19:37:57

标签: c++ linux qt

所以我写了一些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();
}

提前致谢!

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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