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#includeQT_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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.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
使用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