首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在QPainter中使用QPropertyAnimation绘制圆弧

在QPainter中使用QPropertyAnimation绘制圆弧,可以按照以下步骤进行:

  1. 导入必要的模块和类:
代码语言:txt
复制
from PyQt5.QtCore import Qt, QPropertyAnimation, QRectF
from PyQt5.QtGui import QPainter, QColor, QPen, QBrush
from PyQt5.QtWidgets import QWidget, QApplication
  1. 创建一个自定义的QWidget类,用于绘制圆弧:
代码语言:txt
复制
class ArcWidget(QWidget):
    def __init__(self, parent=None):
        super(ArcWidget, self).__init__(parent)
        self.angle = 0

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.setPen(QPen(Qt.black, 2))
        painter.setBrush(QBrush(Qt.red))

        rect = QRectF(10, 10, 200, 200)
        startAngle = 90 * 16  # 以1/16度为单位
        spanAngle = self.angle * 16
        painter.drawArc(rect, startAngle, spanAngle)

    def setAngle(self, value):
        self.angle = value
        self.update()
  1. 创建一个QPropertyAnimation对象,将其与ArcWidget的angle属性绑定:
代码语言:txt
复制
arcWidget = ArcWidget()
animation = QPropertyAnimation(arcWidget, b"angle")
  1. 设置动画的属性:
代码语言:txt
复制
animation.setDuration(2000)  # 动画持续时间为2秒
animation.setStartValue(0)  # 起始值为0
animation.setEndValue(180)  # 结束值为180
  1. 启动动画:
代码语言:txt
复制
animation.start()

完整的代码示例如下:

代码语言:txt
复制
from PyQt5.QtCore import Qt, QPropertyAnimation, QRectF
from PyQt5.QtGui import QPainter, QColor, QPen, QBrush
from PyQt5.QtWidgets import QWidget, QApplication

class ArcWidget(QWidget):
    def __init__(self, parent=None):
        super(ArcWidget, self).__init__(parent)
        self.angle = 0

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.setPen(QPen(Qt.black, 2))
        painter.setBrush(QBrush(Qt.red))

        rect = QRectF(10, 10, 200, 200)
        startAngle = 90 * 16  # 以1/16度为单位
        spanAngle = self.angle * 16
        painter.drawArc(rect, startAngle, spanAngle)

    def setAngle(self, value):
        self.angle = value
        self.update()

if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    arcWidget = ArcWidget()

    animation = QPropertyAnimation(arcWidget, b"angle")
    animation.setDuration(2000)
    animation.setStartValue(0)
    animation.setEndValue(180)
    animation.start()

    arcWidget.show()
    sys.exit(app.exec_())

这段代码创建了一个自定义的QWidget类ArcWidget,通过重写paintEvent方法,在QPainter中绘制了一个圆弧。使用QPropertyAnimation实现了圆弧的动画效果,将动画的起始值设为0,结束值设为180,持续时间为2秒。最后通过调用start方法启动动画,并在应用程序中显示ArcWidget。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云函数(SCF)。

  • 腾讯云云服务器(CVM):提供弹性、可靠、安全的云服务器,可满足各种规模和业务需求。产品介绍链接地址:https://cloud.tencent.com/product/cvm
  • 腾讯云函数(SCF):无服务器计算服务,支持按需运行代码,无需关心服务器管理和运维。产品介绍链接地址:https://cloud.tencent.com/product/scf
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Qt自定义控件之仪表盘的完整实现

概述 基于QT的仪表盘有很多种办法,比如使用QWT或Echart组件,或者基于QT的绘图功能绘制,或者基于美工提供的图片的基础上增加动态效果。然而搞明白QT自定义控件的绘图后,这种实现是最简单的。...painter(this);//一个类的this表示一个指向该类自己的指针 painter.setRenderHint(QPainter::Antialiasing); /* 使用反锯齿...表盘的实现是基于QT的QPainter的绘图方法,自定义实现一个QWidget控件。 将表盘分解析为3个组成部分。表盘的外形轮廓、指针和显示的当前速度的数值。...外形轮廓由一个圆弧和一些指示刻度组成,它的绘制肯定要使用QT的画圆弧的函数、画线函数还有显示文本函数。 指针是一个不规则的多边形,它的绘制会用到QT绘制多边形的函数。...显示当前速度值比较简单些,直接使用显示文本函数绘制。 先有了静态部分的基础,再开始考虑指针的动态旋转过程和旋转过程的渐变效果是如何实现的。 指针旋转的角度应该和当前的转速相互对应。

1.9K10

Qt编写自定义控件33-图片切换动画

一、前言 在很多看图软件,切换图片的时候可以带上动画过渡或者切换效果,显得更人性化,其实主要还是炫一些,比如百叶窗、透明度变化、左下角飞入等,无论多少种效果,核心都是围绕QPainter来进行,将各种动画效果对应的图片的区域动态计算并绘制出来...,配合以QPropertyAnimation动画属性产生线性插值,比如渐入飞入时候,可以中间快速两端慢速。...全部纯Qt编写,QWidget+QPainter绘制,支持Qt4.6到Qt5.12的任何Qt版本,支持mingw、msvc、gcc等编译器,支持任意操作系统比如windows+linux+mac+嵌入式...linux等,不乱码,可直接集成到Qt Creator,和自带的控件一样使用,大部分效果只要设置几个属性即可,极为方便。...所有控件最后生成一个dll动态库文件,可以直接集成到qtcreator拖曳设计使用。 目前已经有qml版本,后期会考虑出pyqt版本,如果用户需求量很大的话。

2K00

Qt官方示例-拖放机器人

❝拖放机器人示例演示如何在QGraphicsItem子类实现拖放,以及如何使用Qt的Animation Framework动画化项目。❞ ?   ...我们将首先看Robot类,以了解如何组装不同的部分,以便可以使用QPropertyAnimation分别旋转和动画化各个部分,然后我们将看ColorItem类,以演示如何在项目之间实现拖放。...QGraphicsObject通过继承QObject提供信号和槽,它还可使用Q_PROPERTY声明QGraphicsItem的属性,这使该属性可用于QPropertyAnimation。   ...出于性能方面的考虑,取决于所绘制内容的复杂性,将头部绘制为图像通常比使用一系列矢量操作更快。...这两个QPropertyAnimation实例仅设置对象,属性以及各自的开始和结束值。   所有动画均由一个顶级并行动画组控制。比例和旋转动画已添加到该组。其余动画以类似方式定义。

4.7K41

小白白也能学会的 PyQt 教程 —— 自定义组件 Switch Button

Switch Button 可供使用,因此边决定自己动手写一个 Switch Button。...在代码使用了一个布尔类型的变量 _switch_on 来表示按钮的状态,初始状态为 False,表示关闭状态。在点击按钮后,会切换状态并更新按钮的颜色。 接下来,我们需要绘制按钮的外观。...在代码使用了 paintEvent 方法来实现按钮的绘制。该方法会被 Qt 框架自动调用,我们可以在其中使用 QPainter 对象进行绘制操作。...为了美观,绘制过程,首先绘制了按钮的背景,使用了一个带圆角的矩形,并填充了浅灰色。然后根据按钮的状态绘制按钮的内部,使用了带圆角的矩形,并填充了相应的颜色。这样就完成了按钮的外观绘制。..._switch_on else QPropertyAnimation.Backward) self.

98441

Qt编写自定义控件62-探探雷达

//绘制中间图片 drawImage(&painter); } void ScanTanTan::drawScan(QPainter *painter) { painter->save...360度的圆弧=绘制无背景的圆形 //painter->drawArc(rect, 0, 360 * 16); painter->drawEllipse(rect); painter...全部纯Qt编写,QWidget+QPainter绘制,支持Qt4.6到Qt5.13的任何Qt版本,支持mingw、msvc、gcc等编译器,支持任意操作系统比如windows+linux+mac+嵌入式...linux等,不乱码,可直接集成到Qt Creator,和自带的控件一样使用,大部分效果只要设置几个属性即可,极为方便。...所有控件最后生成一个动态库文件(dll或者so等),可以直接集成到qtcreator拖曳设计使用。 目前已经有qml版本,后期会考虑出pyqt版本,如果用户需求量很大的话。

81320

Qt编写自定义控件12-进度仪表盘

全部纯Qt编写,QWidget+QPainter绘制,支持Qt4.6到Qt5.12的任何Qt版本,支持mingw、msvc、gcc等编译器,支持任意操作系统比如windows+linux+mac+嵌入式...linux等,不乱码,可直接集成到Qt Creator,和自带的控件一样使用,大部分效果只要设置几个属性即可,极为方便。...每个控件都有一个对应的单独的包含该控件源码的DEMO,方便参考使用。同时还提供一个所有控件使用的集成的DEMO。 每个控件的源代码都有详细中文注释,都按照统一设计规范编写,方便学习自定义控件的编写。...所有控件最后生成一个dll动态库文件,可以直接集成到qtcreator拖曳设计使用。 目前已经有qml版本,后期会考虑出pyqt版本,如果用户需求量很大的话。...使用demo,自定义控件+属性设计器。

1.4K00

Qt贴图与Qss快速入门(一)

前两次和大家分享了Qml绘制仪表盘、Qt自定义控件绘制仪表盘,我是更倾向使用Qml这种方式的。自定义控件使用到了定时器,如果有多个控件的话,那岂不是要使用很多定时器?...下载的程序是用纯代码写的,但我的都是使用Qt Designer来做的。 二、界面布局以及简单样式表使用 1. MainTopWidget MainTopWidget继承自QWidget。...这是直接在Widget设置的样式,要注意的是QWidget直接派生类的样式表是不起作用的,原因是QWidget的paintEvent()是空的,而样式表要通过paint被绘制到窗口中。...解决方法如下: void MainTopWidget::paintEvent(QPaintEvent *) { QStyleOption opt; opt.init(this); QPainter...这几个窗体,当点击按钮时,会将发出信号,在Dialog窗体中将信号与槽连接起来。 ? 4. Dialog窗体 该窗体主要实现了动画的效果,还有就是将需要的信号和槽进行连接。

1.4K30

Qt编写自定义控件24-图片轮播控件

一、前言 上一篇文章写的广告轮播控件,采用的传统widget堆积设置样式表做的,这次必须要用到更高级的QPainter绘制了,这个才是最高效的办法,本控件参考雨田哥的轮播控件,经过大规模的改造而成,相比于原来的广告轮播控件...指示器的宽高颜色等,都是可以自由设定的,这个对于采用QPainter绘制来说,是最好自定义的,无非就是设置对应的画笔QPen和对应的画布QBrush的颜色啦。...全部纯Qt编写,QWidget+QPainter绘制,支持Qt4.6到Qt5.12的任何Qt版本,支持mingw、msvc、gcc等编译器,支持任意操作系统比如windows+linux+mac+嵌入式...linux等,不乱码,可直接集成到Qt Creator,和自带的控件一样使用,大部分效果只要设置几个属性即可,极为方便。...所有控件最后生成一个dll动态库文件,可以直接集成到qtcreator拖曳设计使用

1.9K10

Qt编写自定义控件21-圆弧仪表盘

一、前言 圆弧仪表盘在整个自定义控件大全也稍微遇到了技术难点,比如背景透明,如果采用以前画圆形画扇形的方式绘制,肯定很难形成背景透明,需要用到切割,最后换了一种绘制方法,采用绘制圆弧的方式,即使用drawArc...在用qpainter绘制准备工作,如果先将绘制坐标的中心点移动到区域的中心,painter.translate(width / 2, height / 2); 然后对坐标系进行宽高风向的缩放200倍,.../ 200.0, side / 200.0); //绘制圆弧 drawArc(&painter); //绘制刻度线 drawScale(&painter);...全部纯Qt编写,QWidget+QPainter绘制,支持Qt4.6到Qt5.12的任何Qt版本,支持mingw、msvc、gcc等编译器,不乱码,可直接集成到Qt Creator,和自带的控件一样使用...所有控件最后生成一个dll动态库文件,可以直接集成到qtcreator拖曳设计使用

2.3K40

Qt编写自定义控件32-等待进度条控件

当时在写这个等待进度条的时候,就有考虑到集成多种样式进去供用户选择,比如圆弧状风格、旋转圆风格、三角圆弧、线条风格、圆环风格等,一个控件就相当于五六个控件,这个才牛逼一些,而且代码还很完整和精彩。...全部纯Qt编写,QWidget+QPainter绘制,支持Qt4.6到Qt5.12的任何Qt版本,支持mingw、msvc、gcc等编译器,支持任意操作系统比如windows+linux+mac+嵌入式...linux等,不乱码,可直接集成到Qt Creator,和自带的控件一样使用,大部分效果只要设置几个属性即可,极为方便。...所有控件最后生成一个dll动态库文件,可以直接集成到qtcreator拖曳设计使用。 目前已经有qml版本,后期会考虑出pyqt版本,如果用户需求量很大的话。...使用demo,自定义控件+属性设计器。

1.3K00

Qt编写自定义控件44-天气仪表盘

一、前言 天气仪表盘控件是所有控件唯一一个使用了svg矢量图的控件,各种天气图标采用的矢量图,颜色变换采用动态载入svg的内容更改生成的,其实也可以采用图形字体来做,本次控件为了熟悉下svg在Qt使用...->save(); painter->setBrush(Qt::NoBrush); //绘制圆弧方法绘制圆环 int penWidth = 13; QRectF rect...*painter) { int radius = 99; painter->save(); painter->setBrush(Qt::NoBrush); //绘制圆弧方法绘制圆环...linux等,不乱码,可直接集成到Qt Creator,和自带的控件一样使用,大部分效果只要设置几个属性即可,极为方便。...所有控件最后生成一个dll动态库文件,可以直接集成到qtcreator拖曳设计使用。 目前已经有qml版本,后期会考虑出pyqt版本,如果用户需求量很大的话。

1.5K20

Qt编写自定义控件66-光晕时钟

一、前言 在上一篇文章写了个高仿WIN10系统的光晕日历,这次来绘制一个光晕的时钟,也是在某些网页上看到的效果,时分秒分别以进度条的形式来绘制,而且这个进度条带有光晕效果,中间的日期时间文字也是光晕效果...,整体看起来有点科幻的感觉,本控件没有什么技术难点,如果真要有难点的话也就是如何产生这个光晕效果,在使用painter绘制的时候,设置画笔,可以设置brush,brush可以是各种渐变效果,这个就非常强大了...全部纯Qt编写,QWidget+QPainter绘制,支持Qt4.6到Qt5.13的任何Qt版本,支持mingw、msvc、gcc等编译器,支持任意操作系统比如windows+linux+mac+嵌入式...linux等,不乱码,可直接集成到Qt Creator,和自带的控件一样使用,大部分效果只要设置几个属性即可,极为方便。...所有控件最后生成一个动态库文件(dll或者so等),可以直接集成到qtcreator拖曳设计使用。 目前已经有qml版本,后期会考虑出pyqt版本,如果用户需求量很大的话。

1.5K40

Qt编写自定义控件10-云台仪表盘

之前做过很多自定义控件,大部分都采用了qpainter的形式绘制,有个好处就是自适应任意分辨率,所以思考着这个云台控制仪表盘也采用纯painter绘制的形式,据说纯painter绘制还可以轻松移植到qml...,这又坚定了我用qpainter绘制的决心。..., 99, bgColor); //绘制圆弧 drawArc(&painter); //绘制中间圆盘背景 drawCircle(&painter...linux等,不乱码,可直接集成到Qt Creator,和自带的控件一样使用,大部分效果只要设置几个属性即可,极为方便。...所有控件最后生成一个dll动态库文件,可以直接集成到qtcreator拖曳设计使用。 目前已经有qml版本,后期会考虑出pyqt版本,如果用户需求量很大的话。

1.5K20

Qt5-QtWidgets篇

查看基类[widget] 从界面库拖出来一个widget组件,然后点击提升为,写入类名 [设置全局后可以直接在右键显示] 3 自定义组件只有同基类才能被提升 QT事件 QEvent 鼠标事件...installEventFilter(this); 重写eventfilter事件 绘图 QPainter 绘图事件 void paintEvent(QPaintEvent *) 画家类 QPainter...painter.setRenderHint() 改变画家位置 painter.save();保存当前位置 painter.restore(); 还原到保存的位置 painter.translate(); 移动画家 画家绘制图片...:focus 该控件有输入焦点时 动画 QPropertyAnimation //winLabel 你要对那个组件使用动画 geometry几何结构 QPropertyAnimation *...emit发送一个信号,主界面接收 当然也可以选择记录父类指针,但是必须要在构造函数多传个参数,而不是使用默认的parent 在按钮上方有其他组件,可以使用label->setAttribute(Qt:

1.5K20

Qt编写自定义控件4-旋转仪表盘

一、前言 旋转仪表盘,一般用在需要触摸调节设置值的场景,其实Qt本身就提供了QDial控件具有类似的功能,本控件最大的难点不在于绘制刻度和指针等,而在于自动计算当前用户按下处的坐标转换为当前值,这个功能想了很久...全部纯Qt编写,QWidget+QPainter绘制,支持Qt4.6到Qt5.12的任何Qt版本,支持mingw、msvc、gcc等编译器,支持任意操作系统比如windows+linux+mac+嵌入式...linux等,不乱码,可直接集成到Qt Creator,和自带的控件一样使用,大部分效果只要设置几个属性即可,极为方便。...所有控件最后生成一个dll动态库文件,可以直接集成到qtcreator拖曳设计使用。 目前已经有qml版本,后期会考虑出pyqt版本,如果用户需求量很大的话。...使用demo,自定义控件+属性设计器。

1.9K40
领券