C++ Qt 之 QPushButton 好看的样式效果实践

devtools/2024/9/29 14:03:52/

文章目录

      • 1.前序
      • 2.效果演示
      • 3.代码如下

1.前序

启发于 edge 更新 web 页面,觉得人家做的体验挺好
在这里插入图片描述
决定在Qt实现,方便以后使用

2.效果演示

特性介绍:

  • 默认蓝色
  • 鼠标移入 渐变色,鼠标变为小手
  • 鼠标移出 恢复蓝色,鼠标恢复箭头
  • 鼠标点击 墨绿色
  • 鼠标按下并移出 灰色 | 标识取消

演示 GIF:
在这里插入图片描述
实际 hover 效果:
在这里插入图片描述

3.代码如下

#include <QWidget>
#include <QDebug>
#include <QPushButton>
#include <QMouseEvent>
#include <QVBoxLayout>const static QString BtnNormalStyleSheet = "QPushButton {""    background-color: #29B5D5;"   // Default blue background"    color: white;"                // White text"    border-radius: 5px;"         // Rounded corners"    width:200px;""    height:50px;""    font-weight: bold;""    font-size: 20px;""    padding: 0px 0px;"          // Adjust padding"}""QPushButton:hover {""    background-color: qlineargradient(""        spread:pad, x1:0.6, y1:0, x2:0, y2:0.8, "  // Top to bottom gradient"        stop:0 #29B5D5, stop:1 #01FFFF"        // Lighter blue to default blue"    );""}""QPushButton:pressed {""    background-color: #1B788E;"   // Darker blue when pressed"}";
const static QString BtnPressedMoveOutside = "QPushButton {""    background-color: #474747;"   // Default blue background"    color: white;"                // White text"    border-radius: 5px;"         // Rounded corners"    width:200px;""    height:50px;""    font-weight: bold;""    font-size: 20px;""    padding: 0px 0px;"          // Adjust padding"}";class CustomButton : public QPushButton {Q_OBJECT
public:explicit CustomButton(const QString& text, QWidget* parent = nullptr): QPushButton(text, parent) {setMouseTracking(true);setStyleSheet( BtnNormalStyleSheet );}protected:void enterEvent(QEvent* event) override {setCursor(Qt::PointingHandCursor);  // Change to hand cursorQPushButton::enterEvent(event);}void leaveEvent(QEvent* event) override {unsetCursor();  // Revert to the default cursorQPushButton::leaveEvent(event);}void mouseReleaseEvent(QMouseEvent* event) override {qDebug() << "mouseReleaseEvent";isPressed = false;if (isMouseOutside) {setStyleSheet( BtnNormalStyleSheet );}QPushButton::mouseReleaseEvent(event);}void mousePressEvent(QMouseEvent* event) override {qDebug() << "mousePressEvent";isPressed = true;QPushButton::mousePressEvent(event);}void mouseMoveEvent(QMouseEvent* event) override {qDebug() << "mouseMoveEvent" << isPressed;if (isPressed ) {if (!rect().contains(event->pos())) {isMouseOutside = true;setStyleSheet( BtnPressedMoveOutside ); // Mouse has moved outside the button, change to black} else {isMouseOutside = false;setStyleSheet( BtnNormalStyleSheet );}}QPushButton::mouseMoveEvent(event);}
private:bool isPressed = false;bool isMouseOutside = false;
};

http://www.ppmy.cn/devtools/118719.html

相关文章

WPF C# 读写嵌入的资源 JSON PNG JPG JPEG 图片等资源

WPF C# 读写嵌入的资源 JSON PNG JPG JPEG 图片等资源 1、嵌入资源读取 当文件属性的生成操作设置为嵌入资源时&#xff0c;读取方式如下&#xff1a; string name System.Reflection.Assembly.GetExecutingAssembly().GetName().Name "Resource\testproject\test.pn…

Python 多进程解析:Multiprocessing 高效并行处理的奥秘

Python 多进程解析&#xff1a;Multiprocessing 高效并行处理的奥秘 文章目录 Python 多进程解析&#xff1a;Multiprocessing 高效并行处理的奥秘一 多进程1 导入进程标准模块2 定义调用函数3 创建和启动进程 二 存储进程结果 Queue三 threading & multiprocessing 对比1 …

Java多线程在单体、微服务、服务网格与云原生架构中的理解与线程安全保障:总结与对比

1. 引言 多线程在现代软件开发中的应用广泛&#xff0c;从单体应用到微服务、服务网格以及云原生架构&#xff0c;不同架构下对多线程的理解和线程安全保障存在差异。本文将分别分析这四种架构下的多线程机制&#xff0c;提取其共性与区别&#xff0c;帮助开发者在不同场景下合…

计算机的软件知识

1.4 软件知识 1.4.1 软件及其分类 软件是计算机系统中不可或缺的一部分&#xff0c;它是指计算机程序及其相关文档的集合&#xff0c;是交付给客户的一整套解决方案。软件不仅仅是程序代码&#xff0c;还包括了用自然语言描述的软件功能需求、设计文档、项目计划、用户手册等…

docker简单熟悉

‌Docker 容器和‌虚拟机区别‌ Docker容器与虚拟机的主要区别在于虚拟化层次和资源占用&#xff1a; ‌虚拟化层次‌&#xff1a;Docker容器在操作系统级别进行虚拟化&#xff0c;共享宿主机的内核&#xff1b;而虚拟机在硬件级别进行虚拟化&#xff0c;每个虚拟机都拥有独立…

大数据毕业设计选题推荐-起点小说数据分析与可视化平台-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

如何使用ssm实现航空信息管理系统+vue

TOC ssm728航空信息管理系统vue 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是…

微调大模型(Finetuning Large Language Models)—Evaluation(六)

1. 微调后对模型进行评估 模型的评估目前没有统一的标准&#xff0c;有从正向角度&#xff0c;核对是否命中&#xff0c;当然也有从反向角度&#xff0c;考虑未命中的错误分析。 常见的评估方式如图所示&#xff1a; 本节学习资料地址&#xff1a;传送门 2. 代码测试 2.1 …