我找到了一个让QImage更亮并在我的Qt应用程序中使用的函数。 我想展示简单的"动画"一步一步地使按钮更亮,然后在用户点击后逐步回到初始状态。
这是我的代码:
void Widget::on_stopButton_clicked(){
player.stop();
for(int i = 0; i <= 50; ++i){
QImage* image = new QImage(":/Graphics/Graphics/StopButton.png");
changeBrightness(*image, i);
QPixmap* pixmap = new QPixmap(QPixmap::fromImage(*image));
ui->stopButton->setIcon(QIcon(*pixmap));
QThread::msleep(50);
}
}
它没有像我预期的那样工作...... 我只看到最后的效果,所以最后一次调用: changeBrightness(* image,50);
似乎用户只有在功能结束后才能看到表单上的更改,是不是? 有没有其他方法来制作这样的动画&#34;?
答案 0 :(得分:1)
在更新按钮的图像后,您不会给Qt任何时间重绘窗口小部件,因为您陷入了循环中。只有在您完成图像更新后,Qt才能重绘您的小部件,这就是您只看到最终结果的原因。
查看QTimer。您可以通过QTimer :: setInterval将其超时设置为50毫秒。然后将一个改变按钮图像颜色的插槽连接到QTimer :: timeout。这个插槽很像你的代码,但没有循环。例如。每个槽的调用都是循环的一次迭代。最后,要启动或停止动画,请调用QTimer :: start或QTimer :: stop。