gpt4 book ai didi

c++ - 动态改变图标【QT/c++】

转载 作者:搜寻专家 更新时间:2023-10-31 00:43:54 27 4
gpt4 key购买 nike

我想在 Qt 中实现一个动态变化的性能托盘图标。但是我似乎无法在谷歌上找到任何相关链接,所以你知道如何做到这一点吗?

如果您不知道我的要求,我创建了一个 gif 文件,您可以从中了解我的想法。

因此,任何链接、代码、示例都值得赞赏。 http://gifninja.com/animatedgifs/715636/icon.gif

编辑

所以我想出了一些代码,但是它不起作用,你能看一下吗?

主窗口.h

QPixmap test;
QSystemTrayIcon *speedPerformance;

主窗口.cpp

然后在主窗口构造函数中我有:

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

然后我创建托盘图标

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));

所以,除了当我尝试通过单击已安装的其他托盘图标退出程序时这段代码给我段错误之外,生成的托盘图标是 16x16 黑色方 block ,并且从来没有我想要的那些红色填充矩形正在尝试画画,您知道什么地方可能出错吗?

最佳答案

一个可能的解决方案是使用 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);
}

关于c++ - 动态改变图标【QT/c++】,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9823276/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com