Qt自定义步骤引导按钮
1. 步骤引导按钮
实际在开发项目过程中,由一些流程比较繁琐,为了给客户更好的交互体验,往往需要使用step1->step2这种引导对话框或者引导按钮来引导用户一步步进行设置;话不多说,先上效果



2. 实现原理
实现起来其实也并不复杂,主要是对外接口可以设置多个标题文本,以及当前高亮显示的索引即可
void setTitles(const QStringList &titles);
void setCurStep(int idx);
3.核心绘制代码
void StepGuideButton::paintEvent(QPaintEvent *ev)
{if (m_nSteps == 0) {return QWidget::paintEvent(ev);}QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);int w = this->width();int h = this->height();int wStepWidth = (w - (m_nLinks * LINK_WIDTH)) / m_nSteps;// 绘制背景painter.setPen(Qt::NoPen);painter.setBrush(m_background);painter.drawRoundedRect(QRect(0, 0, w, h), ROUND_RADIUS, ROUND_RADIUS);// 绘制连接点for (int i = 0; i < m_nLinks; ++i) {painter.setPen(Qt::white);painter.setBrush(Qt::white);QPointF ptList[6];ptList[0].setX((i + 1) * wStepWidth + i * LINK_WIDTH);ptList[0].setY(0);ptList[1].setX((i + 1) * wStepWidth + i * LINK_WIDTH + (LINK_WIDTH * 1.0 / 2));ptList[1].setY(0);ptList[2].setX((i + 1) * wStepWidth + (i + 1) * LINK_WIDTH);ptList[2].setY(h / 2.0);ptList[3].setX((i + 1) * wStepWidth + i * LINK_WIDTH + (LINK_WIDTH * 1.0 / 2));ptList[3].setY(h);ptList[4].setX((i + 1) * wStepWidth + i * LINK_WIDTH);ptList[4].setY(h);ptList[5].setX((i + 1) * wStepWidth + i * LINK_WIDTH + (LINK_WIDTH * 1.0 / 2));ptList[5].setY(h / 2.0);painter.drawPolygon(ptList, 6);}// 绘制高亮painter.setPen(Qt::NoPen);painter.setBrush(m_highLight);if (m_curIdx == 0 || m_curIdx == m_titles.size() - 1) {int tempIdx = m_curIdx > 0 ? m_curIdx : 0;painter.drawRoundedRect(QRect(m_curIdx * wStepWidth + tempIdx * LINK_WIDTH, 0, wStepWidth + tempIdx, h), ROUND_RADIUS, ROUND_RADIUS);QPointF ptList[5];if (m_curIdx == 0) {ptList[0].setX(wStepWidth / 2.0);ptList[0].setY(0);ptList[1].setX(wStepWidth);ptList[1].setY(0);ptList[2].setX(wStepWidth + LINK_WIDTH / 2.0);ptList[2].setY(h / 2.0);ptList[3].setX(wStepWidth);ptList[3].setY(h);ptList[4].setX(wStepWidth / 2.0);ptList[4].setY(h);;} else {ptList[0].setX(m_curIdx * (wStepWidth + LINK_WIDTH) - LINK_WIDTH / 2.0);ptList[0].setY(0);ptList[1].setX(m_curIdx * (wStepWidth + LINK_WIDTH) + wStepWidth / 2.0);ptList[1].setY(0);ptList[2].setX(m_curIdx * (wStepWidth + LINK_WIDTH) + wStepWidth / 2.0);ptList[2].setY(h);ptList[3].setX(m_curIdx * (wStepWidth + LINK_WIDTH) - LINK_WIDTH / 2.0);ptList[3].setY(h);ptList[4].setX(m_curIdx * (wStepWidth + LINK_WIDTH));ptList[4].setY(h / 2.0);}painter.drawPolygon(ptList, 5);} else {QPointF ptList[6];ptList[0].setX(m_curIdx * (wStepWidth + LINK_WIDTH) - LINK_WIDTH / 2.0);ptList[0].setY(0);ptList[1].setX(m_curIdx * (wStepWidth + LINK_WIDTH) + wStepWidth);ptList[1].setY(0);ptList[2].setX(m_curIdx * (wStepWidth + LINK_WIDTH) + wStepWidth + LINK_WIDTH / 2.0);ptList[2].setY(h / 2.0);ptList[3].setX(m_curIdx * (wStepWidth + LINK_WIDTH) + wStepWidth);ptList[3].setY(h);ptList[4].setX(m_curIdx * (wStepWidth + LINK_WIDTH) - LINK_WIDTH / 2.0);ptList[4].setY(h);ptList[5].setX(m_curIdx * (wStepWidth + LINK_WIDTH));ptList[5].setY(h / 2.0);painter.drawPolygon(ptList, 6);}// 绘制文本painter.setPen(m_text);for (int i = 0; i < m_nSteps; ++i) {painter.drawText(QRect(i * wStepWidth + (i > 0 ? i * LINK_WIDTH : 0), 0, wStepWidth, h), Qt::AlignCenter, m_titles[i]);}
}
4.完整代码
https://download.csdn.net/download/SuperYang_/90194962
相关文章:
Qt自定义步骤引导按钮
1. 步骤引导按钮 实际在开发项目过程中,由一些流程比较繁琐,为了给客户更好的交互体验,往往需要使用step1->step2这种引导对话框或者引导按钮来引导用户一步步进行设置;话不多说,先上效果 2. 实现原理 实现起来…...
贝叶斯神经网络(Bayesian Neural Network)
最近在研究贝叶斯神经网络,一些概念一直搞不清楚,这里整理一下相关内容,方便以后查阅。 贝叶斯神经网络(Bayesian Neural Network) 贝叶斯神经网络(Bayesian Neural Network)1. BNN 的核心思想2. BNN 的优化目标3. BNN 的结构与特点4. BNN 的训练过程5. BNN 的优缺点6. …...
Direct Preference Optimization: Your Language Model is Secretly a Reward Model
DPO直接偏好优化:你的语言模型实际上是一个奖励模型 前言知识储备 什么是用户偏好数据目的:用于指导模型行为,使其输出更符合特定用户或者用户群体期望和喜好的信息。 用户偏好数据通常反映了用户对特定内容、风格、观点或者互动方式的倾向。 用户偏好数据的收集通常涉及直…...
如何通过 Kafka 将数据导入 Elasticsearch
作者:来自 Elastic Andre Luiz 将 Apache Kafka 与 Elasticsearch 集成的分步指南,以便使用 Python、Docker Compose 和 Kafka Connect 实现高效的数据提取、索引和可视化。 在本文中,我们将展示如何将 Apache Kafka 与 Elasticsearch 集成以…...
嵌入式系统 第十二讲 块设备和驱动程序设计
• 块设备是Linux三大设备之一(另外两种是字符设备,网络设备),块 设备也是通过/dev下的文件系统节点访问。 • 块设备的数据存储单位是块,块的大小通常为512B至32KB不等。 • 块设备每次能传输一个或多个块,…...
攻防世界web第六题upload
这是题目,可以看出是个上传文件的题目,考虑文件上传漏洞,先随便上传一个文件试试,要求上传的是图片。 可以看到上传成功。 考虑用一句话木马解决,构造文件并修改后缀为jpg,然后上传。 <?php eval($_POST[attack])…...
人工智能-Python网络编程-HTTP
用Python创建自己的HTTP服务器 方案一 HTTP-Python官方 python -m http.server 80 方案二 HTTP-概念版 import socketIPV4_ADDR 192.168.124.7 IPV4_PORT 8888# TCP 服务端程序必须绑定端口号,否则客户端找不到这个 TCP 服务端程序 class ServerSocket(obje…...
探索仓颉编程语言:功能、实战与展望
目录 引言 一.使用体验 二.功能剖析 1.丰富的数据类型与控制结构 2.强大的编程范式支持 3.标准库与模块系统 4.并发编程能力 三.实战案例 1.项目背景与目标 2.具体实现步骤 (1).导入必要的模块 (2).发送 HTTP 请求获取网页内容 (3).解析 HTML 页面提取文章信息 (…...
Unity-Editor扩展显示文件夹大小修复版 FileCapacity.cs
实战中是这样的,大项目, 容易定位美术大资产 (原版的代码有问题,每次点运行都会卡顿,大项目20S) //但其实获整个项目内容,1G都没有,有够省的(10年前的中型项目,一直有出DLC) using System; using System.Collections; using System.Collections.Generic; using Sy…...
BLE core 内容整理解释
本文内容比较杂散,只是做记录使用,后续会整理的有条理些 link layer 基本介绍 **Link Layer Control(链路层控制)**是蓝牙低功耗(BLE)协议栈的核心部分,负责实现设备间可靠、安全、低功耗的数…...
Linux CPU调度算法
简述 ● CPU数量 < 进程数 ● 每次CPU都要决定下一个运行的进程,这个选择叫做CPU调度;这个选择工作就叫做CPU调度程序 ● 如果一个进程中有多个线程的话,内核管理的线程就以线程为基本单位 ● 进程通常分为两种,一种长时间占…...
Linux套接字通信学习
Linux套接字通信 在网络通信的时候, 程序猿需要负责的应用层数据的处理(最上层),而底层的数据封装与解封装(如TCP/IP协议栈的功能)通常由操作系统、网络协议栈或相关网络库(如Socket库)实现。(程序员只需要…...
mybatis-plus 用法总结
MyBatis-Plus(简称 MP)是 MyBatis 的增强工具,旨在简化开发者的 CRUD 操作。它在 MyBatis 的基础上提供了更多的功能和便利性,如代码生成器、分页插件、性能分析插件等,使开发者能够更高效地进行数据库操作。MyBatis-P…...
小程序配置文件 —— 14 全局配置 - tabbar配置
全局配置 - tabBar配置 tabBar 字段:定义小程序顶部、底部 tab 栏,用以实现页面之间的快速切换;可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页面; 在上面图中,标注了一些 tabBar …...
Redis-十大数据类型
Reids数据类型指的是value的类型,key都是字符串 redis-server:启动redis服务 redis-cli:进入redis交互式终端 常用的key的操作 redis的命令和参数不区分大小写 ,key和value区分 1、查看当前库所有的key keys * 2、判断某个key是否存在 exists key 3、查…...
linux系统编程(七)管道和FIFO
1、管道 使用系统调用pipe可以创建一个新管道: #include <unistd.h> int pipe(int filedes[2]);成功的pipe调用会在数组filedes中返回两个打开的文件描述符,读取端为filedes[0],写入端为filedes[1]。我们可以使用read/write系统调用在…...
【vLLM大模型TPS测试三部曲】
安装 pip install vllm模型自行下载 例如: https://modelscope.cn/models/jackle/Qwen2.5-Coder-32B-GPTQ-Int4/ 部署测试 export VLLM_MODELQwen2.5-Coder-32B-GPTQ-Int4 # 启动 python3 -m vllm.entrypoints.openai.api_server --model $VLLM_MODEL --deviceauto --enf…...
Elasticsearch:使用 Ollama 和 Go 开发 RAG 应用程序
作者:来自 Elastic Gustavo Llermaly 使用 Ollama 通过 Go 创建 RAG 应用程序来利用本地模型。 关于各种开放模型,有很多话要说。其中一些被称为 Mixtral 系列,各种规模都有,而一种可能不太为人所知的是 openbiollm,这…...
Windows平台ROBOT安装
Windows环境下ROBOT的安装,按照下文进行部署ROBOT的前提是你的python已安装并且环境变量已设置好. 一、安装setuptools 1、下载后安装 https://pypi.python.org/pypi/setuptools/ 下载你需要的包 setuptools-75.6.0.tar.gz 解压下载的包在命令行中进入该包,敲击如下命令后…...
【动态规划篇】穿越算法迷雾:约瑟夫环问题的奇幻密码
欢迎拜访:羑悻的小杀马特.-CSDN博客 本篇主题:带你众人皆知的约瑟夫环问题 制作日期:2024.12.29 隶属专栏:C/C题海汇总 目录 引言: 一约瑟夫环问题介绍: 11问题介绍: 1.2起源与历史背景&…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
