我正在尝试使用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"