当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用动画更改QWidget的背景颜色》经验,为你挑选了1个好方法。

我想用动画改变小部件的背景颜色(如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();

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

谢谢 :-)


它解决了:-)



1> Shf..:

经过一些调查后,似乎QVariantAnimation从中QPropertyAnimation继承了不支持QString动画的属性.所有支持的属性的列表在这里(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.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有