Qt 自定义 进度条 纯代码
一 结果图示

二 代码
头文件
#ifndef CPROGRESS_H
#define CPROGRESS_H
#include <QWidget>
#include <QPainter>
#include <QDebug>
#include <qmath.h>
class CProgress : public QWidget
{
Q_OBJECT
public:
explicit CProgress(QWidget *parent = nullptr);
void setValue(int value); //设置值
void setRectColor(QColor color); //设置背景颜色
void setCursorColor(QColor color); //设置游标颜色
void setValueColor(QColor color); //设置值的背景颜色
void setRadius(int radius); //设置圆角半径
signals:
protected:
void paintEvent(QPaintEvent *); //绘制事件重写
void drawBigRect(QPainter* painter); //绘制圆角长方形
void drawCursor(QPainter* painter); //绘制游标
void drawValue(QPainter* painter); //画值
void drawDots(QPainter* painter); //绘制进度条上的圆点
public slots:
private:
QColor m_bigRectColor; //背景色
QColor m_cursorColor; //游标颜色
QColor m_valueColor; //当前进度颜色
QColor m_dotsColor; //圆点颜色
int m_radius = 6; //圆角半径
int m_xPadding = 10; //x方向边距
int m_yPadding = 20; //y方向边距
int m_value = 0; //当前值:0-100
int m_dotRadius = 4; //圆点的半径
};
#endif // CPROGRESS_H
三 cpp文件
#include "cprogress.h"
CProgress::CProgress(QWidget *parent) : QWidget(parent)
{
m_bigRectColor = QColor(220, 220, 220);
m_cursorColor = QColor(58, 121, 247);
m_valueColor = QColor(58, 121, 247);
m_dotsColor = QColor(58, 121, 247);
}
// 重写绘制事件
void CProgress::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);//设置给定的渲染提示;
drawBigRect(&painter);
drawCursor(&painter);
drawValue(&painter);
drawDots(&painter);
}
//画圆角长方形
void CProgress::drawBigRect(QPainter* painter)
{
QRect rect(m_xPadding, m_yPadding, width() - m_xPadding * 2, height() - m_yPadding * 2);
painter->save();
painter->setPen(Qt::NoPen);
painter->setBrush(m_bigRectColor);
painter->drawRoundedRect(rect, m_radius, m_radius);
painter->restore();
}
//画五边形游标
void CProgress::drawCursor(QPainter* painter)
{
painter->save();
painter->setPen(Qt::NoPen);
painter->setBrush(m_cursorColor);
int x = m_xPadding + (width() - m_xPadding * 2) * m_value / 100;
int y = height() - m_yPadding;
int offset = 8;
QPolygon pts;
pts.append(QPoint(x, y));
pts.append(QPoint(x - offset + 2, y + offset));
pts.append(QPoint(x - offset + 2, y + 2 * offset));
pts.append(QPoint(x + offset - 2, y + 2 * offset));
pts.append(QPoint(x + offset - 2, y + offset));
painter->drawPolygon(pts);//画五边形
painter->restore();
}
//画值
void CProgress::drawValue(QPainter* painter)
{
int width = m_value *( this->width() - m_xPadding * 2) / 100;
QRect rect(m_xPadding, m_yPadding, width, this->height() - m_yPadding * 2);
painter->save();
painter->setPen(Qt::NoPen);
painter->setBrush(m_valueColor);
painter->drawRoundedRect(rect, m_radius, m_radius);
painter->restore();
}
//画进度条上面的点
void CProgress::drawDots(QPainter* painter)
{
int y = 6;
int x = 10;
painter->save();
painter->setPen(Qt::NoPen);
painter->setBrush(m_dotsColor);
for(int i = 0; i < 5; i++)
{
if(i >= 3)
{
painter->setBrush(QColor(255, 0, 0));
}
x = 10 + ((width() - m_xPadding * 2)/4) *i;
if(i == 4)
{
x -= 3;
}
painter->drawEllipse(x, y, m_dotRadius * 2, m_dotRadius * 2);
}
painter->restore();
}
//设置值
void CProgress::setValue(int value)
{
m_value = value;
update();
}
//设置背景颜色
void CProgress::setRectColor(QColor color)
{
m_bigRectColor = color;
update();
}
//设置游标颜色
void CProgress::setCursorColor(QColor color)
{
m_cursorColor = color;
update();
}
//设置当前进度颜色
void CProgress::setValueColor(QColor color)
{
m_valueColor = color;
update();
}
//设置圆角半径
void CProgress::setRadius(int radius)
{
m_radius = radius;
update();
}
Qt 自定义 进度条 纯代码的更多相关文章
- Qt之模型/视图(自定义进度条)
简述 在之前的章节中分享过关于QHeaderView表头排序.添加复选框等内容,相信大家模型/视图.自定义风格有了一定的了解,下面我们来分享一个更常用的内容-自定义进度条. 实现方式: 从QAbstr ...
- 自定义进度条PictureProgressBar——从开发到开源发布全过程
自定义进度条PictureProgressBar——从开发到开源发布全过程 出处: 炎之铠邮箱:yanzhikai_yjk@qq.com 本文原创,转载请注明本出处! 本项目JCenter地址:htt ...
- C# 根据BackgroundWoker异步模型和ProgressBar控件,自定义进度条控件
前言 程序开发过程中,难免会有的业务逻辑,或者算法之类产生让人能够感知的耗时操作,例如循环中对复杂逻辑处理;获取数据库百万乃至千万级数据;http请求的时候等...... 用户在使用UI操作并不知道程 ...
- android 自定义进度条颜色
android 自定义进度条颜色 先看图 基于产品经理各种自定义需求,经过查阅了解,下面是自己对Android自定义进度条的学习过程! 这个没法了只能看源码了,还好下载了源码, sources\b ...
- android113 自定义进度条
MainActivity: package com.itheima.monitor; import android.os.Bundle; import android.app.Activity; im ...
- BitBlt()函数实现带数字百分比进度条控件、静态文本(STATIC)控件实现的位图进度条、自定义进度条控件实现七彩虹颜色带数字百分比
Windows API BitBlt()函数实现带数字百分比进度条控件. 有两个例子:一用定时器实现,二用多线程实现. 带有详细注解. 此例是本人原创,绝对是网上稀缺资源(本源码用Windows AP ...
- Android_自定义进度条
转载:http://blog.csdn.net/lmj623565791/article/details/43371299 ,本文出自:[张鸿洋的博客] 1.概述 最近需要用进度条,秉着不重复造轮子的 ...
- jquery自定义进度条与h5原生进度条
介绍一款自定义的进度条 <div class="box-nine"> <div class="progress"> <!--一 ...
- 最简单的android自定义进度条样式
一.自定义圆形进度条样式 1.在安卓项目drawable目录下新建一个xml文件如下:<?xml version="1.0" encoding="utf-8&quo ...
随机推荐
- Leetcode(4)-两个排序数组的中位数
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 . 请找出这两个有序数组的中位数.要求算法的时间复杂度为 O(log (m+n)) . 示例 1: nums1 = [1, 3] ...
- Tomcat基本原理
思考 :怎样让Tomcat具备Web服务的功能呢? 在服务端用HTTP来监听,协议不好写,不妨用Java封装好的Socket作为监听. class MyTomcat{ ServerSocket ser ...
- hdu2333-贪心,如何去后效性,背包太大怎么办,如何最大化最小值,从无序序列中发掘有序性质
补充一下我理解的中文题意.. 你要重新组装电脑..电脑有一些部件..你的预算有b,b(1~1e9),有n个部件..每个部件有类型和名称以及价钱和质量现在你要在不超过预算b的情况下..每个类型都买一个部 ...
- 网站资源被盗链的:预防方法 VS 网站资源防盗链的:破解技巧
1 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问! 1 资源被盗链:(简明定义) 下载者不是从你的网站直接下载资源,而是通过其他盗链网站提供的你的下载资源链接进行下载你的服务 ...
- macOS 需要更新软件才能连接到 iOS 设备
macOS 需要更新软件才能连接到 iOS 设备 更新 Mac 上的软件 如果您在 iPhone.iPad 或 iPod touch 上看到"需要更新软件才能连接到 iOS 设备" ...
- pub package all in one
pub package all in one best practice The pubspec file https://dart.dev/tools/pub/pubspec demo name: ...
- how to convert a number to a number array in javascript without convert number to a string
how to convert a number to a number array in javascript without convert number to a string 如何在不将数字转换 ...
- how to get window width in javascript
how to get window width in javascript how to get window width in js How to Detect Screen Resolution ...
- NGK乘势而上打造生态所,建立全方位的区块链生态系统
当金融理财变成了生活的一部分,购买金融衍生品的眼光成为了影响生活质量重要组成部分.这是一个不缺少黄金的年代,一夜间实现财务自由的故事每天都在上演,但是由于太多人缺少发现黄金的眼睛,只能被财富和机遇拒之 ...
- JQuery:JQuery基本语法,JQuery选择器,JQuery DOM,综合案例 复选框,综合案例 随机图片
知识点梳理 课堂讲义 1.JQuery快速入门 1.1.JQuery介绍 jQuery 是一个 JavaScript 库. 框架:Mybatis (jar包) 大工具 插件:PageHelper (j ...