Мусорные пиксели на прозрачном фоне 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"