显示半透明圆的快速动画

Fast animation for showing semi-transparent circle

本文关键字:动画 半透明 显示      更新时间:2023-10-16

我正在为Android开发一个简单的Qt测试应用程序。我试图通过显示半透明的圆圈来动画用户在屏幕上的每次触摸,例如,它的半径从0增加到100。

我在所有小部件的顶部添加了一个自定义QLabel。我想通过使用QPropertyAnimation更新自定义属性

来使它的QPixmap动画化
Q_PROPERTY(QRect circleGeometry READ getCircleGeometry WRITE setCircleGeometry)

setter为:

void CircleLabel::setCircleGeometry(QRect circleGeometry)
{
    QPixmap pixmap(this->size());
    pixmap.fill(Qt::transparent);
    QPainter painter(&pixmap);
    painter.setOpacity(0.2);
    painter.setPen(QPen(Qt::transparent));
    painter.setBrush(QBrush(Qt::white));
    painter.setRenderHint(QPainter::Antialiasing);
    painter.drawEllipse(circleGeometry);
    this->setPixmap(pixmap);
}

我明白了,setter对于动画来说太重了,所以它在我的android设备上运行缓慢。你能告诉我如何修改我的动画,使它快速和流畅吗?

所以…我的解决方案是在应用程序启动时创建一个矢量QPixmaps,然后我的CircleLabel::setCircleGeometry将看起来像:

void CircleLabel::setCircleGeometry(int currentIdx)
{
    this->setPixmap(preGeneratedPixmaps[currentIdx]);
}