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

news2024/11/14 21:58:17

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
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1920663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2006-2021年 291个地级市资源错配指数、劳动和资本相对扭曲指数do文件和结果

资源错配指数&#xff1a;衡量生产要素配置效率的关键指标 资源错配指数&#xff08;Misallocation Index&#xff09;是一个衡量资源配置效率的指标&#xff0c;它反映了生产要素是否得到了合理配置&#xff0c;以及是否达到了生产效率的最优状态。一个较高的资源错配指数意味…

three-tile: 一个开源的轻量级三维瓦片库

three-tile 介绍 three-tile 是一个开源的轻量级三维瓦片库&#xff0c;它基于threejs使用typescript开发&#xff0c;提供一个三维地形模型&#xff0c;能轻松给你的应用增加三维瓦片地图。 https://blog.csdn.net/HZGJF/article/details/140280844 源码&#xff1a;https:/…

malloc与free函数的用法(精简全面 · 一看即懂)

前言&#xff1a;Hello大家好&#x1f618;&#xff0c;我是心跳sy&#xff0c;今天为大家带来malloc函数与free函数的用法&#xff0c;我们一起来看看吧&#xff01; 目录 一、malloc函数 &#x1f4ab; 1、⭐️malloc函数对应的头文件⭐️ 2、⭐️malloc函数的作用⭐️ 3…

高职计算机网络实训室

一、高职计算机网络实训室建设的背景 如今&#xff0c;数字化发展已成为国家发展的战略方向&#xff0c;是推动社会进步和经济发展的重要动力。在这一时代背景下&#xff0c;计算机网络技术作为数字化发展的基础设施&#xff0c;其地位和作用愈发凸显。因此&#xff0c;高职院…

Windows中nvm的安装配置和卸载

文章目录 Windows中安装配置&#xff0c;和卸载nvm一、卸载node二、安装vnm三、配置环境&#xff08;配置路径和下载源&#xff09;四、使用nvm安装node五、nvm常见的命令六、nvm的卸载 Windows中安装配置&#xff0c;和卸载nvm 一、卸载node 如果没有node可以直接了跳过该步…

<数据集>Udacity交通目标识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;13239张&#xff08;实际有15000张&#xff0c;但其中1761张无标签的图片被我去除掉&#xff09; 标注数量(xml文件个数)&#xff1a;13239 标注数量(txt文件个数)&#xff1a;13239 标注类别数&#xff1a;11 标注…

全开源TikTok跨境商城源码/TikTok内嵌商城+搭建教程/前端uniapp+后端

多语言跨境电商外贸商城 TikTok内嵌商城&#xff0c;商家入驻一键铺货一键提货 全开源完美运营 海外版抖音TikTok商城系统源码&#xff0c;TikToK内嵌商城&#xff0c;跨境商城系统源码 接在tiktok里面的商城。tiktok内嵌&#xff0c;也可单独分开出来当独立站运营 二十一种…

Tomcat下载安装配置教程(零基础超详细)

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 Tomcat 1、下载…

Docker 镜像构建报 exec xxx.sh: no such file or directory

问题记录 场景&#xff1a; 处于对nacos docker 部署最新版本的探究&#xff0c;但是nacos/nacos-server镜像拉取不到最新版本&#xff0c;官网也是给出自己构建镜像的方案。 具体步骤很简单&#xff0c;先clone项目&#xff0c;然后签出你要的nacos版本&#xff0c;通过docke…

Java——IO流(二)-(7/7):补充知识:IO框架(什么是框架、什么是IO框架、Commons-io)

目录 什么是框架 什么是IO框架 Commons-io 常用方法 框架下载 框架导入 实例演示 什么是框架 解决某类问题&#xff0c;编写的一套类、接口等&#xff0c;可以理解成一个半成品&#xff0c;大多框架都是第三方研发的。好处&#xff1a;在框架的基础上开发&#xff0c;可…

edge 学习工具包 math solver

简介 推荐微软推出的学习工具中的两项工具&#xff1a;数学求解器和 pdf 阅读器。 打开 edge 学习工具包的方法 &#xff1a;右上角三点-更多工具-学习工具包。 math solver 除了基础的计算求解外&#xff0c;还用图标展示公式&#xff0c;清晰直观。 地址&#xff1a;求解…

Vue 中的 scoped 和 /deep/ 深度选择器

Vue在组件里写 css 给 <style> 标签加上 scoped &#xff0c;比如&#xff1a; <style lang"less" scoped> &#xff0c;这样的 css 就是局部的&#xff0c;不会影响其他组件。 假设引入了一个子组件&#xff0c;并希望在组件中修改子组件的样式&#x…

多波束常用设备的坐标系统

CARIS处理多波束的时候&#xff0c;一般首先要建立船型文件&#xff0c;采集的设备或软件不同&#xff0c;其船型文件也不同&#xff0c;其中最关键就是采集设备和软件的坐标系统。 为了使用方便&#xff0c;不用费力地去查对应的使用手册&#xff0c;现将常用多波束设备和软件…

VMware vSAN 8.0U3 - 存储虚拟化软件

VMware vSAN 8.0U3 - 存储虚拟化软件 vSAN 8 with Express Storage Architecture 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-vsan/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org VMware vSAN 存储虚拟化软…

Covalent Network(CXT)通过社区投票将代币迁移并更名为 CXT,以推动人工智能更深层次的创新

专注于人工智能和 Web3 的模块化数据基础设施 Covalent Network&#xff08;CXT&#xff09;宣布&#xff0c;其治理提案已通过社区投票并顺利实施&#xff0c;即将原生代币 CQT 迁移为新的 CXT 代币&#xff0c;并部署至新的合约。这一关键性转变标志着 Covalent Network&…

Fastjson2使用JSONOObject或者mao转换为JSON字符串时丢失Null值字段

最近在工作中发现问题fastJson转换为JSONString时丢失值为null的问题特此解决。 public class test001 {public static void main(String[] args) {JSONObject jsonObject new JSONObject();jsonObject.put("foo1", "bar");jsonObject.put("foo2&quo…

最新 Kubernetes 集群部署 + Containerd容器运行时 + flannel 网络插件(保姆级教程,最新 K8S 1.28.2 版本)

资源列表 操作系统配置主机名IP所需插件CentOS 7.92C4Gk8s-master192.168.60.143flannel-cni-plugin、flannel、coredns、etcd、kube-apiserver、kube-controller-manager、kube-proxy、 kube-scheduler 、containerd、pause 、crictlCentOS 7.92C4Gk8s-node01192.168.60.144f…

“汇聚全球智慧·引领未来科技”2024南京人工智能展会

南京&#xff0c;这座古老而又现代的城市&#xff0c;自古以来便是江南繁华的代名词。如今&#xff0c;随着科技的飞速发展&#xff0c;南京再次站在了时代的潮头&#xff0c;以其深厚的历史底蕴和不断创新的科技力量&#xff0c;成为了全球瞩目的焦点。而在即将到来的2024年&a…

未解之谜----macOS版fiddler everywhere 如何将当前会话保存成一个txt文件查看

如图&#xff0c;这是win版的保存方式&#xff0c;mac上面根本没有这个按钮&#xff0c;找的很崩溃

排序(二)——快速排序(QuickSort)

欢迎来到繁星的CSDN&#xff0c;本期内容包括快速排序(QuickSort)的递归版本和非递归版本以及优化。 一、快速排序的来历 快速排序又称Hoare排序&#xff0c;由霍尔 (Sir Charles Antony Richard Hoare) &#xff0c;一位英国计算机科学家发明。霍尔本人是在发现冒泡排序不够快…