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

文章目录

      • 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.xdnf.cn/news/147343.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【学习笔记】 AD24中元器件重叠系统不报错的解决方案(消除报错)

【学习笔记】 AD24中PCB设计元器件重叠后系统不报错的解决方案&#xff08;如何主动屏蔽报错&#xff09; 一、Component Clearance未开启使能的解决方案二、最小水平间距设置错误的解决方案三、未开启设计规则检查的解决方案四、设计规则检查中 “在线”和“批量”的含义五、为…

前端——JavaScript练习 做一个todoList

用前端制作一个todoList的表格&#xff0c;实现更新、删除、修改等功能。 涉及几个知识点&#xff1a; 设置最小高度&#xff08;宽度&#xff09;&#xff1a; .container{min-width: 350px;/* 最小宽度 最小不会小于210px */ } 去掉外轮廓 outline: none; 去除字…

寄存器与内存

第三课&#xff1a;寄存器与内存、中央处理器&#xff08;CPU&#xff09;、指令和程序及高级 CPU 设计-CSDN博客 锁存器 引入 ABO0&#xff08;开始状态&#xff09;001&#xff08;将A置1&#xff09;110&#xff08;将A置0&#xff09;11 无论怎么做&#xff0c;都没法从1变…

深度学习(一):神经网络入门

文章目录 一、神经网络1.1神经元结构1.2单层神经网络&#xff1a;单层感知机1.3两层神经网络&#xff1a;多层感知机1.4多层神经网络 二、全连接神经网络2.1基本结构2.2激活函数、前向传播、反向传播、损失函数2.2.1激活函数的意义2.2.2前向传播2.2.3损失函数、反向传播2.2.4梯…

uniapp小程序持续获取用户位置信息,后台位置获取

做一个小程序持续获取用户位置信息的功能&#xff0c;即使小程序切换到后台也能继续获取&#xff0c;getLocation这个api只有小程序在前台才能获取位置&#xff0c;所以不用这个 先申请一个腾讯地图key 在uniapp项目配置源码视图里加上这个代码 先获取权限&#xff0c;再开启…

NtripShare测量机器人自动化监测系统测站更换仪器后重新设站

NtripShare测量机器人自动化监测系统投入商业运营已经很久了&#xff0c;在MosBox与自动优化网平差技术的加持下&#xff0c;精度并不让人担心&#xff0c;最近基于客户需求处理了两个比较大的问题。 1、增加对反射片和免棱镜的支持。 2、进一步优化测站更换仪器或重新整平后重…

批量归一化与层归一化的区别

batch-normalization是根据每一列的特征进行批量归一化&#xff0c;把一个batch&#xff08;N张图片&#xff09;中同一通道的特征(w*h的特征图)&#xff0c;将其标准化。可以理解为对batch中的所有图的每一层像素(也就是不同的通道)进行标准化。通常在图像领域用的多&#xff…

【报告阅读】chatgpt-o1 技术报告阅读 | 新的迭代开始了~

OpenAI o1是通过强化学习去进行复杂推理&#xff0c;在它回答之前&#xff0c;他会经过复杂的内部思维链的思考。 经过强化训练的o1多强 1 表现 在美国数学奥林匹克预选赛中名列前500名的学生中&#xff0c;o1排89名 在物理、生物、化学问题的基准测试中超过人类博士水平 其…

(done) 声音信号处理基础知识(6) (How to Extract Audio Features)

参考&#xff1a;https://www.youtube.com/watch?v8A-W1xk7qs8&t2s 先复习之前分类的声学特征 时域特征流水线 如下是 441Khz 下一个采样点播放的时间。这比人类耳朵分辨率(10ms)还低。 所以&#xff0c;把多个采样点组合成一个 frame 的原因有&#xff0c;这是一个人…

布草洗涤必备4张表-———未来之窗行业应用跨平台架构

一、洗涤厂客户月度报表 二、大酒店楼层布草月度统计报表 三、职员月度报表 四、司机当日统计报表 五、阿雪技术观 拥抱开源与共享&#xff0c;见证科技进步奇迹&#xff0c;畅享人类幸福时光&#xff01; 让我们积极投身于技术共享的浪潮中&#xff0c;不仅仅是作为受益者&a…

Docker实践——天池篇

参考零基础入门Docker-cuda练习场_学习赛_天池大赛-阿里云天池的赛制 (aliyun.com) ​ 在Docker零基础入门-CSDN博客中我已经安装了docker,现在开始创建自己的镜像仓库。 1. 开通阿里云容器镜像服务(镜像仓库) 进入容器镜像服务 (aliyun.com) 1.1. 创建个人实例 点击“…

Elasticsearch导出导入数据

1.概念回顾 2.基础操作 展示详细信息 GET&#xff1a;http://127.0.0.1:9200/_cat/indices?v Java代码将文件导入到ES package com.Graph.medicalgraph;import org.apache.http.HttpHost; import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.act…

17_Python的生成器

生成器&#xff08;Generator&#xff09; 生成器&#xff08;Generator&#xff09;是Python中一种特殊的迭代器&#xff0c;它允许你在需要时才计算和产生值&#xff0c;而不是一次性生成整个序列。生成器使用yield语句来逐个产生值&#xff0c;而不是像迭代器那样实现__ite…

全球贸易中的关键标识符:DUNS、GLN及其他ID在EDI中的应用

在电子数据交换&#xff08;EDI&#xff09;中&#xff0c;识别交易伙伴的唯一标识符对于确保数据准确传输和处理至关重要。不同的企业标识符在EDI的不同场景中发挥着重要作用&#xff0c;其中最常见的包括DUNS&#xff08;数据通用编号系统&#xff09;、GLN&#xff08;全球位…

【Java笔记】第12章:常用类

1. Object类2. 包装类3. String类 上期回顾:【Java笔记】第11章&#xff1a;内部类 个人主页&#xff1a;C_GUIQU 归属专栏&#xff1a;【Java学习】 1. Object类 Object&#xff1a;位于java.lang包中&#xff0c;是所有类的父类&#xff08;直接父类/间接父类&#xff09;。…

移动硬盘‘需格式化‘困境:原因剖析、恢复策略与预防之道

困境直击&#xff1a;移动硬盘为何需格式化才能访问&#xff1f; 在数字化时代&#xff0c;移动硬盘作为数据存储与传输的重要工具&#xff0c;其稳定性与可靠性直接关系到用户数据的安全。然而&#xff0c;不少用户在使用过程中遭遇了“移动硬盘需要格式化才能打开”的尴尬境…

【Linux】进程概念-1

文章目录 1.本节重点2. 冯诺依曼体系结构3.操作系统&#xff08;Operator System&#xff09;3.1 概念3.2 设计OS的目的3.3 定位3.4 如何理解“管理”3.5 总结3.6 系统调用和库函数概念3.7 承上启下 4. 进程4.1 基本概念4.2 描述进程——PCB4.3 通过系统调用获取进程标示符4.4 …

C语言实现常见的数据结构

栈 栈是一种后进先出&#xff08;LIFO, Last In First Out&#xff09;的数据结构 #include <stdio.h> #include <stdlib.h>#define MAX 100typedef struct {int data[MAX];int top; } Stack;// 初始化栈 void init(Stack *s) {s->top -1; }// 判断栈是否为空…

黄酮类化合物及其衍生物生物合成的进展:构建酵母细胞工厂的系统策略-文献精读50

Advances in Flavonoid and Derivative Biosynthesis: Systematic Strategies for the Construction of Yeast Cell FactoriesCli 黄酮类化合物及其衍生物生物合成的进展&#xff1a;构建酵母细胞工厂的系统策略 摘要 黄酮类化合物是一类重要的天然多酚化合物&#xff0c;具有…

240922-MacOS终端访问硬盘

A. 最终效果 B. 操作步骤 在macOS中&#xff0c;可以通过命令行使用Terminal访问硬盘的不同位置。你可以按照以下步骤操作&#xff1a; 打开终端&#xff08;Terminal&#xff09;&#xff1a; 在应用程序中打开终端&#xff0c;或者使用 Spotlight 搜索“Terminal”来启动。 …