Qt 自定义长条进度条(类似播放器进度条)

1.运行界面

2.步骤

其实很简单。

2.1绘制底图圆角矩形

2.2绘制播放进度圆角矩形

参考:painter绘图

3.源码

#pragma once

#include <QWidget>
#include <QLabel>
#include <QHBoxLayout>
#include <QMouseEvent>
#include <QDebug>
#include <QShowEvent>
#include <QPainter>

class WProgressBar : public QWidget
{
	Q_OBJECT
public:
	WProgressBar(QWidget *parent = nullptr);
	~WProgressBar();

signals:
	void sigCustomSliderValueChanged(double pos);//自定义的鼠标单击信号,用于捕获并处理

public:
	//获取pos
	double getPos();

public slots:
	//设置0~1
	void slotSetValue(double pos);

protected:
	void mousePressEvent(QMouseEvent *ev);
	void mouseMoveEvent(QMouseEvent *ev);
	void mouseReleaseEvent(QMouseEvent *ev);
	void paintEvent(QPaintEvent *);

private:
	double m_pos = 0;
};


#include "WProgressBar.h"


WProgressBar::WProgressBar(QWidget *parent)
	: QWidget(parent)
{
	this->setWindowFlags(Qt::FramelessWindowHint);          //隐藏窗口
	this->setAttribute(Qt::WA_TranslucentBackground, true); //窗口透明
}

WProgressBar::~WProgressBar()
{
}

double WProgressBar::getPos()
{
	return m_pos;
}

void WProgressBar::slotSetValue(double pos)
{
	m_pos = pos;
	update();
}

void WProgressBar::mousePressEvent(QMouseEvent *ev)
{
	//double pos = (double)ev->pos().x() / (double)width();
	//if (pos >= 1)
	//	pos = 1;

	//if (pos <= 0)
	//	pos = 0;

	//m_pos = pos;
	//update();
	//qDebug() << "seek pos = " << pos;
	//emit sigCustomSliderValueChanged(pos);
}

void WProgressBar::mouseMoveEvent(QMouseEvent *ev)
{
	double pos = (double)ev->pos().x() / (double)width();
	if (pos >= 1)
		pos = 1;

	if (pos <= 0)
		pos = 0;

	m_pos = pos;
	update();
}

void WProgressBar::mouseReleaseEvent(QMouseEvent *ev)
{
	double pos = (double)ev->pos().x() / (double)width();
	emit sigCustomSliderValueChanged(pos);
}

void WProgressBar::paintEvent(QPaintEvent *e)
{
	QWidget::paintEvent(e);
	QPainter painter(this);
	painter.setRenderHint(QPainter::Antialiasing);

	//绘制底图矩形
	QBrush brush;
	brush.setColor(QColor(233,233,233));
	brush.setStyle(Qt::SolidPattern);
	painter.setBrush(brush);
	painter.drawRoundedRect(this->rect(), 5, 5);

	//绘制播放进度
	QLinearGradient radial;

	radial.setStart(0, 0);
	radial.setFinalStop(0, 1);

	//设置起始点颜色,0表示起始
	radial.setColorAt(0, QColor("#87CEFA"));

	//设置终点颜色 1表示终点
	radial.setColorAt(1, QColor("#1E90FF"));

	//设置延展方式
	radial.setSpread(QGradient::PadSpread);

	QPen pen(QBrush("#1E90FF"), 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
	painter.setPen(pen);

	//设置画刷
	painter.setBrush(radial);

	QRect rect = this->rect();
	rect.setWidth(rect.width() * m_pos);

	//画矩形
	painter.drawRoundedRect(rect, 5, 5);
}

4.应用截图

一款自己做的播放器界面截图

5.绘图参考

1.圆形进度条实现

2.麦克风音量大小模拟

3.自定义时钟

4.自定义圆形进度条

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

助力智能化农田作物除草,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建农田作物场景下玉米苗、杂草检测识别分析系统

在我们前面的系列博文中&#xff0c;关于田间作物场景下的作物、杂草检测已经有过相关的开发实践了&#xff0c;结合智能化的设备可以实现只能除草等操作&#xff0c;玉米作物场景下的杂草检测我们则少有涉及&#xff0c;这里本文的主要目的就是想要基于DETR模型来开发构建玉米…

26、Qt调用.py文件中的函数

一、开发环境 Qt5.12.0 Python3.7.8 64bit 二、使用 新建一个Qt项目&#xff0c;右击项目名称&#xff0c;选择“添加库” 选择“外部库”&#xff0c;点击“下一步” 点击“浏览”&#xff0c;选择Python安装目录下的libs文件夹中的“python37.lib”文件&#xff0c;点击“下…

文献笔记:LINE: Large-scale Information Network Embedding

paper 看完√ code复现ing https://arxiv.org/pdf/1503.03578v1.pdf 本文研究了将非常大的信息网络嵌入到低维向量空间的问题&#xff0c;这在可视化、节点分类和链路预测等许多任务中都很有用。大多数现有的图形嵌入方法无法扩展到通常包含数百万个节点的现实世界信息网络。…

java 正则表达式介绍

Java正则表达式是一种强大的文本处理工具&#xff0c;它允许你进行模式匹配、搜索和文本操作。正则表达式提供了一种简洁、灵活的方式来处理字符串&#xff0c;可以用于各种应用场景&#xff0c;如数据验证、文本解析、搜索和替换等。 正则表达式的基础知识 正则表达式…

物联网主机:为智能交通赋能

物联网&#xff08;IoT&#xff09;技术的发展为智能交通领域带来了许多创新的解决方案。而在物联网应用中&#xff0c;物联网主机起着关键的作用。本文将为大家介绍一款名为E6000的物联网主机&#xff0c;它是一种多协议、多接口的物联网主机&#xff0c;为智能交通系统的建设…

高级语言期末2009级A卷(计算机学院)

1.编写bool函数&#xff0c;判定给定的正整数n&#xff0c;M是否满足&#xff1a;M为n的质因数&#xff08;能整除n的质数&#xff09; #include <stdio.h> #include <stdbool.h> #include <math.h>bool Isprime(int n) {if(n<1)return false;for(int i2…

spring boot整合cache使用memcached 优化将配置信息放入 application中管理

上文 spring boot整合cache使用memcached 我们简单做了个 spring boot 整合cache 使用 memcached 缓存的案例 但 我们是将地址这类信息 放在了config 目录下的一个 配置类中了 这样 可维护性肯定是很低的 其实 memcached 是有一系列配置的 我们还是正确将 配置信息 写进 appli…

基于springboot+vue的美食推荐商城

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

图表背后的智慧:办公场景中的数据可视化革新

在现代办公场景中&#xff0c;数据可视化的应用已经成为提高效率、推动创新的得力工具。无论是管理层还是普通员工&#xff0c;都能从数据可视化中受益匪浅。下面我就以可视化从业者的角度&#xff0c;简单聊聊这个话题。 首先&#xff0c;数据可视化提升了数据的易读性与理解性…

【重温设计模式】装饰模式及其Java示例

装饰模式的介绍 在众多设计模式中&#xff0c;有一种叫做装饰模式&#xff0c;它以一种独特的方式赋予了代码更多的灵活性。 装饰模式是一种结构型设计模式&#xff0c;它允许我们在运行时动态地为对象添加新的行为。这就像是我们在装饰一个房间时&#xff0c;可以随意添加或更…

CentOS系统上安装幻兽帕鲁/Palworld服务端的详细步骤是什么?

CentOS系统上安装幻兽帕鲁/Palworld服务端的详细步骤是什么&#xff1f; 首先&#xff0c;需要确认Docker是否已经安装。如果未安装&#xff0c;则需要进行安装。接下来&#xff0c;运行Docker容器。这一步是为了创建一个可以运行幻兽帕鲁服务端的环境。然后&#xff0c;在容器…

bootstrap-table 多层组合表头

如下图所示的二层组合表头 来人&#xff0c;上代码&#xff01; table.bootstrapTable({url: $.fn.bootstrapTable.defaults.extend.index_url,pk: id,sortName: id,search: false,showToggle: false,showColumns: false,showExport: false, commonSearch: false,columns: [[…

ElasticSearch之分布式模型介绍,选主,脑裂

写在前面 本文看下es分布式模型相关内容。 1&#xff1a;分布式模型 1.1&#xff1a;分布式特征 支持水平扩展&#xff0c;可以存储PB级别数据&#xff0c;每个就能都有自己唯一的名称,默认名称时elasticsearch&#xff0c;可以通过配置文件&#xff0c;如cluster.name: my…

使用 Docker 部署 Fiora 在线聊天室平台

一、Fiora 介绍 Fiora 简介 Fiora 是一款开源免费的在线聊天系统。 GitHub&#xff1a;https://github.com/yinxin630/fiora Fiora 功能 注册账号并登录&#xff0c;可以长久保存你的数据加入现有群组或者创建自己的群组&#xff0c;来和大家交流和任意人私聊&#xff0c;并添…

Cascading risk assessment in power-communication interdependent networks论文导读

Cascading risk assessment in power-communication interdependent networks 前言碎碎念 新学期了&#xff0c;兜兜转转绕了一圈&#xff0c;看了两篇交通流预测的内容&#xff0c;不过我的主要研究方向不在于此。最近和一些老师沟通交流&#xff0c;感觉思路稍微清晰了一些…

雷龙CS SD NAND(贴片式TF卡)测评体验

前段时间有幸免费得到了雷龙出品的贴片式的TF卡的芯片及转接板&#xff0c;两片贴片式nand芯片&#xff0b;一个转接板&#xff0c;一种一个已让官方焊接完好&#xff1b;如下图所示&#xff1a; 正面&#xff1a; 背面&#xff1a; 通过转接板&#xff0c;可以将CS SD NAND(贴…

好视通视频会议系统存在任意文件读取漏洞复现 [附POC]

漏洞简介 好视通视频会议是由深圳市华视瑞通信息技术有限公司开发&#xff0c;其在国内率先推出了3G互联网视频会议&#xff0c;并成功应用于SAAS领域。 资产 FOFA:app"好视通-视频会议" POC GET /register/toDownload.do?fileName../../../../../../../../../.…

NSGA II 算法讲解(毕业设计)(三)

目录 前言 1、NSGA II算法介绍 2、Pareto最优概念 2.1 Pareto最优&#xff0c;Pareto前延 2.2 支配关系 3、NSCA-II与NSCA相比&#xff0c;优势 4、NSGA II流程逻辑 5、拥挤度排序 6、新子代生成 前言 本篇文章介绍的是我的毕业设计&#xff0c;我将C语言将其实现。本…

深入理解volatile关键字

一、简介 volatile是 Java提供的一种轻量级的同步机制。Java包含两种内在的同步机制&#xff1a;同步块&#xff08;或方法&#xff09;和 volatile 变量相比于synchronized (synchronized常称为重量级&#xff09;volatile是更轻量级的&#xff0c;因为它不会引起线程上下文的…

LeetCode25: K 个一组翻转链表

题目描述 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点…