gpt4 book ai didi

qt - 使用动画更改 QWidget 的背景颜色

转载 作者:行者123 更新时间:2023-12-01 19:52:36 26 4
gpt4 key购买 nike

我想使用动画更改小部件(如 qlabel)的背景颜色。事实上,我想为 QMainWindow 上的子部件的背景颜色运行淡入和淡出动画。所以,我写了一些代码如下:

QPropertyAnimation *animation = new QPropertyAnimation(ui->label1, "styleSheet");

animation->setStartValue("background-color: rgb(240, 240, 240)");
animation->setEndValue("background-color: rgb(126, 194, 66)");
animation->setDuration(3000);

animation->start();

但是没有任何变化!!!
我该怎么做?

谢谢:-)

<小时/>

解决了:-)

最佳答案

经过一番调查,继承了 QPropertyAnimationQVariantAnimation 似乎不支持 QString 作为动画属性。所有支持的属性的列表是 here (Int、UInt、Double、Float、QLine、QLineF、QPoint、QPointF、QSize、QSizeF、QRect、QRectF、QColor)

因此,您需要对要更改背景颜色的每个小部件进行子类化,并为它们创建自己的属性。

就像这个 - Q_PROPERTY(QColor color READ color WRITE setColor)

并且在该子类的setColor方法中,您应该更改颜色。

下面的QLabel示例:

class AnimatedLabel : public QLabel
{

Q_OBJECT
Q_PROPERTY(QColor color READ color WRITE setColor)

public:
AnimatedLabel(QWidget *parent = 0)
{
}
void setColor (QColor color){
setStyleSheet(QString("background-color: rgb(%1, %2, %3);").arg(color.red()).arg(color.green()).arg(color.blue()));
}
QColor color(){
return Qt::black; // getter is not really needed for now
}
};

并且您对动画的调用应更改为:

QPropertyAnimation *animation = new QPropertyAnimation(ui->label, "color");
animation->setDuration(2000);
animation->setStartValue(QColor(0, 0, 0));
animation->setEndValue(QColor(240, 240, 240));
animation->start();

其中 ui->label 是 AnimatedLabel(在表单设计器中将您的 QLabel 升级为 AnimatedLabel。

关于qt - 使用动画更改 QWidget 的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34445507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com