Мусорные пиксели на прозрачном фоне QSystemTrayIcon

Я пытаюсь сделать значок в системном трее, используя Qt 5.10.0. Значок будет непрямоугольным (текст на самом деле). Мой текущий код работает нормально на панели KDE Plasma, но на 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 ответов

Другие вопросы по тегам