Qt工作笔记-QML自定义圆形进度条(C++后端处理数据)
发布日期:2021-06-30 10:58:53 浏览次数:2 分类:技术文章

本文共 3134 字,大约阅读时间需要 10 分钟。

目录

 


 

原理

1.使用QML中的Canvas绘制圆形,用一种颜色,说明是未读取,再用另外一种颜色覆盖到原来的颜色!说明进度!

2.使用setContextProperty把C++中的某个继承了QObject的类映射到QML中!

3.QML中有一个计时器,去实时读取QObject中的进度!

 

程序运行截图如下:

 

源码

程序结构如下:

源码如下:

mycicular.h

#ifndef MYCICULAR_H#define MYCICULAR_H#include 
QT_BEGIN_NAMESPACEclass QTimer;QT_END_NAMESPACEclass MyCicular : public QObject{ Q_OBJECTpublic: MyCicular(QObject *parent = 0); ~MyCicular(); Q_INVOKABLE int getCurrentValue(); Q_INVOKABLE void finished();protected slots: void addValueTimeout();private: int m_endValue; int m_startValue; QTimer *m_timer;};#endif // MYCICULAR_H

main.cpp

#include 
#include
#include
#include
#include "mycicular.h"int main(int argc, char *argv[]){ QApplication a(argc, argv); MyCicular myCicular; QQuickView view; view.engine()->rootContext()->setContextProperty("canvas", &myCicular); view.setResizeMode(QQuickView::SizeViewToRootObject); view.setSource(QUrl("qrc:/main.qml")); view.show(); return a.exec();}

mycicular.cpp

#include "mycicular.h"#include 
#include
#include
MyCicular::MyCicular(QObject *parent) : QObject(parent){ m_startValue = 0; m_endValue = 1000; m_timer = new QTimer; connect(m_timer, SIGNAL(timeout()), this, SLOT(addValueTimeout())); m_timer->start(5);}MyCicular::~MyCicular(){ delete m_timer;}int MyCicular::getCurrentValue(){ return ((double)m_startValue / (double)m_endValue) * 360;}void MyCicular::finished(){ QMessageBox::information(NULL, "提示", "程序读取结束");}void MyCicular::addValueTimeout(){ m_startValue++; if(m_startValue >= m_endValue){ m_timer->stop(); }}

CircularProgress.qml

import QtQuick 2.4Canvas{    property int radius: 100    property real progress: 0    property real arcWidth: 2    id:canvas    width: 2 * radius + arcWidth    height: 2 * radius + arcWidth    Text{        anchors.centerIn: parent        font.pointSize: 15        text: Math.floor((parent.progress / 360) * 100) + "%"    }    onPaint:{        var ctx = getContext("2d")        ctx.beginPath()        ctx.strokeStyle = "#AAAAAA"        ctx.lineWidth = 2        ctx.arc(width / 2, height / 2, radius, 0, Math.PI * 2, false)        ctx.stroke()        var r = progress * Math.PI / 180        ctx.beginPath()        ctx.strokeStyle = "#148014"        ctx.lineWidth = 2        ctx.arc(width / 2, height / 2, radius, 0 - 90 * Math.PI / 180                , r - 90 * Math.PI / 180, false)        ctx.stroke()    }}

main.qml

import QtQuick 2.7import QtQuick.Controls 2.0Item {    visible: true    width: 400    height: 300    CircularProgress{        id: circularProgress        anchors.centerIn: parent    }    Timer{        id: timer        running: true        repeat: true        interval: 100        onTriggered: {            console.log(circularProgress.progress)            if(circularProgress.progress == 360){                timer.running = false                canvas.finished()            }            circularProgress.progress = canvas.getCurrentValue()            circularProgress.requestPaint()        }    }}

 

转载地址:https://it1995.blog.csdn.net/article/details/86483959 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Qt文档阅读笔记-Text QML Type官方解析及实例
下一篇:Qt文档阅读笔记-Label QML Type官方解析及实例

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月08日 02时10分13秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

学习笔记(34):一学即懂的计算机视觉(第一季)-图像表示与描述 2019-04-30
学习笔记(35):一学即懂的计算机视觉(第一季)-图像表示与描述II 2019-04-30
学习笔记(36):一学即懂的计算机视觉(第一季)-图像表示描述实战演练 2019-04-30
学习笔记(37):一学即懂的计算机视觉(第一季)-总结 2019-04-30
学习笔记(38):高并发下的Nginx性能优化实战-Nginx优势特点总结 2019-04-30
学习笔记(40):高并发下的Nginx性能优化实战-nginx命令 2019-04-30
学习笔记(41):高并发下的Nginx性能优化实战-Linux下Nginx的安装(一) 2019-04-30
学习笔记(42):高并发下的Nginx性能优化实战-Nginx配置文件详解 2019-04-30
学习笔记(44):高并发下的Nginx性能优化实战-Nginx配置web应用集群搭建 2019-04-30
学习笔记(45):高并发下的Nginx性能优化实战-Nginx负载均衡(一) 2019-04-30
QLineEdit和QDateTimeEdit等含编辑框使用stylesheet配置背景透明时,鼠标进入离开背景闪烁问题的解决 2019-04-30
使用Poco库进行加解密和签名验签 2019-04-30
走进开源代码(一) 2019-04-30
走进开源代码(二) 2019-04-30
[转]深度剖析闪电网络 2019-04-30
听李天飞《大话西游》有感 2019-04-30
走进开源代码(三) 2019-04-30
Linux下开发Qt界面程序时命令行传参数的一个坑 2019-04-30
SourceInsight使用技巧(转) 2019-04-30
QT之旅——post 文件 2019-04-30