当前位置: 首页 > news >正文

QT实现自定义带有提示信息的透明环形进度条

1. 概述


做界面开发的童鞋可能都会遇到这样的需求,就是有一些界面点击了之后比较耗时的操作,需要界面给出一个环形进度条的进度反馈信息. 如何来实现这样的需求呢,话不多说,上效果

透明进度条

2. 代码实现


waitfeedbackprogressbar.h

#ifndef WAITFEEDBACKPROGRESSBAR_H
#define WAITFEEDBACKPROGRESSBAR_H#include <QWidget>
#include <QTimer>
#include "customcomponent_global.h"class CUSTOMCOMPONENT_EXPORT WaitFeedbackProgressBar : public QWidget
{Q_OBJECT
public:WaitFeedbackProgressBar(QWidget *parent = nullptr);~WaitFeedbackProgressBar();void start();void stop();protected:void paintEvent(QPaintEvent *event);private slots:void updaterRotation();private:QTimer *m_timer = nullptr;int m_rotation = 0;
};#endif  // WAITFEEDBACKPROGRESSBAR_H

waitfeedbackprogressbar.cpp

#include "waitfeedbackprogressbar.h"#include <QPainter>
#include <QPainterPath>WaitFeedbackProgressBar::WaitFeedbackProgressBar(QWidget *parent): QWidget(parent)
{m_timer = new QTimer;connect(m_timer, &QTimer::timeout,this, &WaitFeedbackProgressBar::updaterRotation);
}WaitFeedbackProgressBar::~WaitFeedbackProgressBar()
{if (m_timer != nullptr) {disconnect(m_timer, &QTimer::timeout,this, &WaitFeedbackProgressBar::updaterRotation);delete m_timer;m_timer = nullptr;}
}void WaitFeedbackProgressBar::start()
{if (m_timer == nullptr) {return;}m_timer->start(3);
}void WaitFeedbackProgressBar::stop()
{if (m_timer == nullptr) {return;}m_timer->stop();
}void WaitFeedbackProgressBar::updaterRotation()
{m_rotation++;if(m_rotation == 360){m_rotation = 0;}update();
}void WaitFeedbackProgressBar::paintEvent(QPaintEvent *event)
{int width = this->width();int height = this->height();int side = qMin(width, height);QPainter painter(this);painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);painter.translate(width / 2, height / 2);painter.scale(side / 200.0, side / 200.0);QConicalGradient gra(QPoint(0,0),0);gra.setColorAt(0, QColor("#3BB6FE"));gra.setColorAt(1, QColor("#FFFFFF"));QBrush brush(gra);int radis = 40;int sider = 5;QRect rect(-radis, -radis, radis * 2, radis * 2);QPainterPath path;path.arcTo(rect, 0, 270);QPainterPath subPath;subPath.addEllipse(rect.adjusted(sider, sider, -sider, -sider));path = path - subPath;painter.setBrush(brush);painter.setPen(Qt::NoPen);painter.rotate(m_rotation);painter.drawPath(path);
}

waitfeedbackdialog.h

#ifndef WAITFEEDBACKDIALOG_H
#define WAITFEEDBACKDIALOG_H#include <QDialog>
#include "dialog_global.h"namespace Ui {
class WaitFeedbackDialog;
}class DIALOG_EXPORT WaitFeedbackDialog : public QDialog
{Q_OBJECT
public:explicit WaitFeedbackDialog(QWidget *parent = nullptr);void start();void stop();signals:private:Ui::WaitFeedbackDialog *ui;
};#endif  // WAITFEEDBACKDIALOG_H

waitfeedbackdialog.cpp

#include "waitfeedbackdialog.h"
#include "ui_waitfeedbackdialog.h"WaitFeedbackDialog::WaitFeedbackDialog(QWidget *parent) :QDialog(parent),ui(new Ui::WaitFeedbackDialog)
{ui->setupUi(this);setWindowFlags(Qt::FramelessWindowHint | windowFlags());setAttribute(Qt::WA_TranslucentBackground, true);
}void WaitFeedbackDialog::start()
{ui->wgt_feedbackprogress->start();
}void WaitFeedbackDialog::stop()
{ui->wgt_feedbackprogress->stop();
}

waitfeedbackdialog.ui
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于蓝牙iBeacon定位技术的商场3D楼层导视软件功能详解与实施效益
  • 底软驱动 | Linux字符设备驱动开发基础
  • Vulnhub靶场 | DC系列 - DC2
  • 计算机视觉研究方向初学习,计算机视觉都有什么方向??!到底是干什么的?!
  • Kubelet 认证
  • iOS热门面试题(三)
  • 社交App iOS审核中的4.3问题:深入分析与解决策略
  • python-28-零基础自学python-json存数据、读数据,及程序合并
  • acnconda虚拟环境管理笔记
  • 大话设计模式
  • 如何用 Java 实现一个简单的单例模式,怎么处理线程安全问题?
  • Git使用介绍教程
  • 进销存管理系统设计
  • pico+unity3d项目配置
  • apache:the requested operation has failed使用httpd -t
  • Akka系列(七):Actor持久化之Akka persistence
  • Android 架构优化~MVP 架构改造
  • Create React App 使用
  • Elasticsearch 参考指南(升级前重新索引)
  • Flannel解读
  • Java编程基础24——递归练习
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • SpringBoot 实战 (三) | 配置文件详解
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 大数据与云计算学习:数据分析(二)
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 记一次用 NodeJs 实现模拟登录的思路
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何进阶一名有竞争力的程序员?
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 算法-插入排序
  • 我感觉这是史上最牛的防sql注入方法类
  • 我建了一个叫Hello World的项目
  • 我看到的前端
  • 写代码的正确姿势
  • 学习使用ExpressJS 4.0中的新Router
  • 白色的风信子
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 如何正确理解,内页权重高于首页?
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • #FPGA(基础知识)
  • (152)时序收敛--->(02)时序收敛二
  • (2)(2.10) LTM telemetry
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (javaweb)Http协议
  • (SpringBoot)第七章:SpringBoot日志文件
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (翻译)terry crowley: 写给程序员
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (南京观海微电子)——I3C协议介绍
  • (十二)springboot实战——SSE服务推送事件案例实现