流畅地改变 QPushButton 图标的亮度

Changing fluently brightness of QPushButton icon

我发现了一个使QImage更亮的函数,并在我的Qt应用程序中使用。 我想展示简单的 "animation" 使按钮逐步变亮,然后在用户单击它后逐步回到初始状态。

这是我的代码:

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

好像只有功能结束后用户才能看到表单的变化,对吗? 有没有其他方法可以做到这样"animation"?

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

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