QGraphicsView QGraphicsItem 实例5

您所在的位置:网站首页 qgraphicsview实例 QGraphicsView QGraphicsItem 实例5

QGraphicsView QGraphicsItem 实例5

2024-06-16 22:25| 来源: 网络整理| 查看: 265

通过实现:一个在其中显示各种类型QGraphicsItem的窗口例子,介绍如何使用Qt预定义的各种标准的QGraphicsItem类型(如QGraphicsEllipseItem、QGraphicsRectItem等),以及自定义的QGraphicsItem类型(如本例中不停闪烁的圆及来回移动的星星等)来创建图元。

QTimeLine类提供用于控制动画的时间表,通常用于定期调用插槽来为GUI控件创建动画。简单来说,就是可以通过 QTimeLine 来快速的实现动画效果,其原理就是在指定的时间内发出固定帧率的信号,通过连接该信号去改变目标控件的值,由于时间断帧率高,所以整体看起来就是连续的动画效果。 以上说得可能有些抽象,下面结合实例和用法步骤来看看。

用法 将使用步骤总结为以下几点:1.创建 QTimeLine对象的时候传入时间值,单位是毫秒,该时间就是动画运行的时间; 2.设置帧率范围,通过setFrameRange()进行设置,该值表示在规定的时间内将要执行多少帧; 3.连接frameChanged()信号,并在槽中对需要实现动画的控件进行赋值,如QProgressBar的setValue(). 4.调用 start()开始执行时间轴动作。

例如:

progressBar = new QProgressBar(this); progressBar->setRange(0, 100); progressBar->move(100,100); // Construct a 1-second timeline with a frame range of 0 - 100 QTimeLine *timeLine = new QTimeLine(1000, this); timeLine->setFrameRange(0, 100); connect(timeLine, SIGNAL(frameChanged(int)), progressBar, SLOT(setValue(int))); // Clicking the push button will start the progress bar animation QPushButton * pushButton = new QPushButton(tr("Start animation"), this); connect(pushButton, SIGNAL(clicked()), timeLine, SLOT(start()));

当 QTimeLine调用 start()后将进入运行状态,并会发出frameChanged()信号,而连接该信号的槽中将会不断的对目标控件进行相应的动作赋值,从而实现动画效果。

可以通过调用setUpdateInterval()来指定更新间隔。完成后,QTimeLine进入NotRunning状态,并发出finished().

默认情况下,时间轴从开始到结束运行一次,此时必须再次调用start()才能从头开始重新启动。要进行时间线循环,您可以调用setLoopCount(),并在完成之前传递时间轴应该运行的次数。

通过调用setDirection(),方向也可以改变,可以让时间线向后运行。

也可以通过调用setPaused()来暂停和取消暂停时间轴的运行。

对于交互式控件,提供了setCurrentTime()函数,该函数直接设置时间线的时间位置。

原文链接:https://blog.csdn.net/luoyayun361/article/details/80381984

图元的动画显示有江中两种方式可以实现:

1.利用 QGraphicsItemAnimation类和QTimLine类实现 。如本例中圆是闪烁功能的实现

2.在图元类中利用定时器QTimer和图元的重画函数paint()实现。如本例中星星不停的左右移动

flash.h

#ifndef FLASH_H #define FLASH_H #include #include #include class Flash : public QObject,public QGraphicsItem { Q_OBJECT public: explicit Flash(QObject *parent = nullptr); QRectF boundingRect() const; //图元边界函数,完成以图元坐标系为基础,增加两个像素点的冗余工作 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) ; void t


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3