QSystemTrayIcon透明背景中的垃圾像素

时间:2018-04-11 07:03:19

标签: qt system-tray notification-area qsystemtrayicon

我正在尝试使用Qt 5.10.0制作系统托盘图标。图标将是非矩形(实际上是文本)。我当前的代码在KDE等离子面板上正常工作,但是在XFCE4面板上,只要图标的像素是透明的,它就会在后台显示垃圾。垃圾通常代表系统托盘中一些已经存在的图标的碎片,但有时会有一些其他窗口。

几乎所有其他应用程序'图标看起来干净,包括基于Qt的应用程序,如QBittorrent,Klipper,KTorrent,以及基于GTK(Pidgin)。唯一的例外是Dropbox和我的代码。值得注意的是,我的代码以及Dropbox都是基于Qt5的,而上面提到的正确外观的Qt应用程序是基于Qt4的。编译我的Qt4代码确实没有显示问题。

以下是代码。我在这里做错了什么?

#include <QTimer>
#include <QPixmap>
#include <QPainter>
#include <QApplication>
#include <QSystemTrayIcon>

class MyTrayIcon : public QSystemTrayIcon
{
    Q_OBJECT
    QTimer updateTimer;

public:
    MyTrayIcon()
    {
        connect(&updateTimer, SIGNAL(timeout()), this, SLOT(updateIcon()));
        updateTimer.start(2*1000);
        updateIcon();
    }

private:

    Q_SLOT void updateIcon()
    {
        const int size=22;
        QPixmap pixmap(size,size);
        // Make sure there's no garbage in the pixmap
        pixmap.fill(Qt::transparent);

        QPainter painter(&pixmap);
        painter.setPen(QColor(0,96,192));
        painter.drawText(pixmap.rect(), Qt::AlignCenter, "5");

        setIcon(pixmap);
    }
};

int main(int argc, char** argv)
{
    QApplication app(argc,argv);
    MyTrayIcon trayIcon;
    trayIcon.show();
    return app.exec();
}

#include "temps.moc"

0 个答案:

没有答案