我想在Qt
中实现动态变化的效果托盘图标。
但是我似乎无法在谷歌上找到任何相关链接,所以你有任何想法如何做到这一点?
如果你不知道我要求的是什么,我已经创建了一个gif文件,你会明白我的想法。
所以任何链接,代码,示例都表示赞赏。 http://gifninja.com/animatedgifs/715636/icon.gif
修改
所以我想出了一些代码,但它没有用,你能不能看看它?
mainwindow.h
QPixmap test;
QSystemTrayIcon *speedPerformance;
mainwindow.cpp
然后在mainwindow构造函数中我有:
this->test = QPixmap(16,16);
然后我称之为这段代码:
QTimer *trayIconTimer = new QTimer(this);
connect(trayIconTimer , SIGNAL(timeout()), this, SLOT(updateSpeedIcon()));
trayIconTimer->start(2000); // update it every 2 seconds
然后我创建了trayicon
speedPerformance = new QSystemTrayIcon(this);
QPainter p(&test);
QColor color;
p.fillRect(0,0,16,16,color.black());
p.end();
speedPerformance->setIcon(QIcon(test));
最后,这里是updateSpeeIcon()
的代码,每2秒调用一次:
QPainter p(&test);
QColor color;
p.setPen(color.red());
xPaint+=3;
qDebug() << xPaint;
p.fillRect(xPaint,0,2,16,color.red());
p.end();
speedPerformance->setIcon(QIcon(test));
所以,除了当我尝试通过点击安装的其他trayicon退出程序时这段代码给我分段错误这一事实,得到的托盘图标是16x16黑色方块,并且从来没有那些红色填充矩形我我试图画画,你知道什么是错的吗?
答案 0 :(得分:4)
可能的解决方案是使用QTimer
。您必须将timeout
信号连接到您将更新图标的插槽。
QTimer *trayIconTimer = new QTimer(this);
connect(trayIconTimer , SIGNAL(timeout()), this, SLOT(updateTrayIcon()));
timer->start(2000); // update it every 2 seconds
在插槽中,您将创建新图标并进行设置:
voi updateTrayIcon()
{
QIcon newIcon = CreateIcon();
// I assume that tray is a pointer to the `QSystemTrayIcon`
tray->setIcon(newIcon);
}
答案 1 :(得分:1)
由于您有托盘图标,因此您必须已使用QSystemTrayIcon
课程。使用此课程,您可以随时更改托盘图标。只需致电QSystemTrayIcon::setIcon()
。
答案 2 :(得分:0)
如果我理解你的问题,这些是你应该遵循的步骤;
inside your application class,
create a icon variable
create a dataSource variable
inside constructor()
icon = DEFAULT_ICON
connect(dataSource, SIGNAL(performanceChanged()),
this, SLOT(updateIcon()));
inside updateIcon()
var = dataSource.getPerformanceLevel();
switch(var)
case LEVEL_1:
icon = getLevel1Icon()
case LEVEL_2:
icon = getLevel2Icon()
....
希望这会有所帮助...