Qt 自绘开关按钮以及设计器中的提升为用法

news/2024/10/19 23:30:44/

文章目录

    • 自绘按钮实现
      • 概要
      • 效果图
      • 代码
    • '提升为'用法
      • 介绍
      • 步骤
    • 总结

自绘按钮实现

概要

  • 当我们需要一个开关样式的QPushbutton,没有图片的话,我们可以采用自绘的形式实现。
  • 且使用QtDesinger提升为Promote to的功能加入界面中,而不是使用代码的方式。

效果图

请添加图片描述

代码

  • 代码相对简单,主要看一下绘制的实现
void SwitchButton::paintEvent(QPaintEvent *event)
{QPushButton::paintEvent(event); // 调用基类的绘制事件QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 定义滚珠的半径qreal ballRadius = height() * 0.4; // 可以根据需要调整滚珠大小qreal padding = (height() - ballRadius * 2) / 2; // 按钮内部边距// 绘制按钮的背景QRectF rect(padding, padding, width() - padding * 2, height() - padding * 2);painter.setPen(Qt::NoPen);if(m_isAutoMode){painter.setBrush(QColor(33, 51, 107));}else{painter.setBrush(QColor(25, 127, 224));}painter.drawRoundedRect(rect, ballRadius, ballRadius); // 使用滚珠半径作为圆角半径// 绘制圆形滚珠qreal ballPosition = m_isAutoMode ? rect.width() - ballRadius * 2 : 0;QRectF ballRect(ballPosition + padding, padding, ballRadius * 2, ballRadius * 2);// 设置滚珠的渐变色qreal gradientCenterX = ballPosition + padding + ballRadius;qreal gradientCenterY = padding + ballRadius;QRadialGradient gradient(gradientCenterX, gradientCenterY, ballRadius);gradient.setColorAt(0, QColor(25, 127, 224));gradient.setColorAt(1, QColor(33, 51, 107));painter.setBrush(gradient);painter.drawEllipse(ballRect);// 绘制文本painter.setPen(Qt::white);QString text = m_isAutoMode ? "自动模式" : "手动模式";painter.drawText(rect, Qt::AlignCenter, text);
}

'提升为’用法

介绍

  • 在Qt设计器中,它允许用户将一个标准Qt Widget转换为自定义的QWidget子类。这样,用户可以在设计器中使用自己的控件,同时还能在代码中添加额外的功能或属性。

步骤

  1. 随便拖入一个按钮到设计器中 在这里插入图片描述
  2. 右键它,找到’提升为’选项
    在这里插入图片描述
  3. 填入已经实现的类,点击添加,添加完成后就可以选择提升
    在这里插入图片描述

总结

  • 知识理应共享,源码在此
  • 提升为用起来还是很方便的,可以大大减少代码量以及提高阅读效率

http://www.ppmy.cn/news/1540363.html

相关文章

流体力学笔记

目录 1、名词2、湍流与涡流3 涡激振动4 压力面与吸力面参考:[空气动力学的“他山之石”](https://zhuanlan.zhihu.com/p/412542513) 1、名词 转列:transition 涡脱落:vortex shedding 涡分离:vortex rupture 气动噪声&#xff1a…

SpringBoot配置文件敏感信息如何加密?及踩坑总结(全面讲解)

目录 1.添加依赖 2.接下来去生成密文 3.然后在命令行窗口通过mvn命令去调用这个插件 4.接下来会生成对对应的密文,然后去替换application.properties中的对应内容 5.运行程序解密 在软件开发中,保护敏感信息如数据库密码、API密钥等是至关重要的。J…

leaflet(一)初始化地图

Leaflet 与天地图结合使用,可以通过天地图提供的 API 获取地图瓦片,并在 Leaflet 地图上显示。 1. 安装依赖 首先,确保你已经安装了 Leaflet 和 Vue: npm install leaflet npm install vue-leaflet npm install leaflet.tilela…

【黑马Redis原理篇】Redis网络模型

来源视频 [16,27] 文章目录 1.用户空间和内核空间空间划分缓冲区 2.IO模型2.1 阻塞IO2.2 非阻塞IO2.3 IO多路复用2.3.1 阻塞和非阻塞的对比2.3.2 IO多路复用2.3.3 监听FD方式、通知的方式,有多种实现 2.4 信号驱动IO2.5 异步IO2.6 真正的同步和异步 1.用户空间和内…

开篇:SpringBoot与SpringCloud的那些事

在正式开始研究 SpringCloud 的技术之前,咱先简单的用比较短的篇幅聊一点概述性质的东西,让思维活跃起来。 SpringCloud与SpringBoot的关系和对比 一开始学习 SpringCloud 咱就知道,SpringCloud 的技术大多都不是自己造的,都是整合…

Vue快速创建工程+Element Plus

创建Vue工程 执行命令 npm init vuelatest 执行这两个绿色的命令 执行这个命令启动 npm run dev Element 打开网站https://element-plus.org/zh-CN/ npm install element-plus --save 然后在vscode中打开你的项目工程 // main.ts import { createApp } from vue import Ele…

jQuery 中的 Ajax 详解

一、概念 众所周知,jQuery 是一个跨主流浏览器的 JavaScript 库,它封装了 JavaScript 的常用功能代码,简化了 HTML DOM 操作、事件处理、动画设计和 Ajax 交互等任务。jQuery 中的 Ajax 是对 XMLHttpRequest 或 ActiveXObject(IE9…

Java 小游戏《超级马里奥》

文章目录 一、效果展示二、代码编写1. 素材准备2. 创建窗口类3. 创建常量类4. 创建动作类5. 创建关卡类6. 创建障碍物类7. 创建马里奥类8. 编写程序入口 一、效果展示 二、代码编写 1. 素材准备 首先创建一个基本的 java 项目,并将本游戏需要用到的图片素材 image…