0

我找到了一个使 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);

似乎只有在函数结束后用户才能看到表单的变化,对吗?还有其他方法可以制作这样的“动画”吗?

4

1 回答 1

1

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

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

于 2016-08-26T13:51:55.107 回答