改变QPushButton图标的流畅亮度

时间:2016-08-26 13:47:43

标签: qt brightness qpushbutton qicon

我找到了一个让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;?

1 个答案:

答案 0 :(得分:1)

在更新按钮的图像后,您不会给Qt任何时间重绘窗口小部件,因为您陷入了循环中。只有在您完成图像更新后,Qt才能重绘您的小部件,这就是您只看到最终结果的原因。

查看QTimer。您可以通过QTimer :: setInterval将其超时设置为50毫秒。然后将一个改变按钮图像颜色的插槽连接到QTimer :: timeout。这个插槽很像你的代码,但没有循环。例如。每个槽的调用都是循环的一次迭代。最后,要启动或停止动画,请调用QTimer :: start或QTimer :: stop。