【Qt开发】常用控件(七)-> styleSheet

目录

1 -> 引言:为什么需要 Qt 样式表?

2 -> Qt 样式表基础

2.1 -> 什么是 Qt 样式表

2.2 -> 基本语法结构

3 -> 选择器类型

3.1 -> 通用选择器

3.2 -> 类型选择器

3.3 -> 类选择器

3.4 -> ID 选择器(通过 objectName)

3.5 -> 属性选择器

3.6 -> 子控件选择器

3.7 -> 状态选择器

4 -> 常用属性详解

4.1 -> 背景与边框

4.2 -> 文本与字体

4.3 -> 尺寸与边距

4.4 -> 渐变与图像

5 -> 复杂控件样式化

5.1 -> QComboBox 样式

5.2 -> QSlider 样式

5.3 -> QTabWidget

6 -> 代码示例

6.1 -> 设置文本样式

6.2 -> 实现切换夜间模式


1 -> 引言:为什么需要 Qt 样式表?

在 GUI 开发中,应用程序的外观和用户体验至关重要。Qt 提供了强大的样式表系统,允许开发者使用类似 CSS 的语法来美化应用程序界面,无需重写绘图代码或创建自定义控件。无论想实现现代化界面、保持跨平台一致性,还是创建品牌特定的视觉风格,Qt 样式表都能轻松实现。

2 -> Qt 样式表基础

2.1 -> 什么是 Qt 样式表

Qt 样式表(QSS)是一种基于 CSS 语法的机制,用于自定义 Qt 控件的外观。它允许你设置颜色、字体、边框、背景等属性,而无需子类化 Qt 控件。

CSS(Cascading Style Sheets 层叠样式表)本身属于网页前端技术。主要就是用来描述界面的样式。

所谓 “样式”,包括不限于大小,位置,颜色,间距,字体,背景,边框等。

平时所看到的丰富多彩的网页,就会用到大量的 CSS。

Qt 虽然是做 GUI 开发,但实际上和网页前端有很多异曲同工支持。因此 Qt 也引入了对于 CSS 的支持。

CSS 中可以设置的样式属性非常多。基于这些属性 Qt 只能支持其中一部分,称为 QSS(Qt Style Sheet)。

2.2 -> 基本语法结构

选择器 {属性: 值;属性: 值;
}

示例:

QPushButton {background-color: #3498db;color: white;border: 2px solid #2980b9;border-radius: 5px;padding: 5px 10px;
}

3 -> 选择器类型

3.1 -> 通用选择器

* {font-family: "Microsoft YaHei";font-size: 12px;
}

3.2 -> 类型选择器

QPushButton {/* 所有QPushButton的样式 */
}

3.3 -> 类选择器

.QPushButton {/* 与类型选择器类似 */
}

3.4 -> ID 选择器(通过 objectName)

QPushButton#loginButton {background-color: green;
}

3.5 -> 属性选择器

QPushButton[flat="true"] {border: none;
}

3.6 -> 子控件选择器

QComboBox::drop-down {/* QComboBox下拉箭头的样式 */
}

3.7 -> 状态选择器

QPushButton:hover {background-color: #2980b9;
}QPushButton:pressed {background-color: #21618c;
}QPushButton:disabled {color: gray;background-color: #dddddd;
}

4 -> 常用属性详解

4.1 -> 背景与边框

QWidget {background-color: #f0f0f0; /* 背景颜色 */border: 1px solid #cccccc; /* 边框:宽度 样式 颜色 */border-radius: 4px;       /* 圆角半径 */
}

4.2 -> 文本与字体

QLabel {color: #333333;           /* 文本颜色 */font-family: "Arial";     /* 字体家族 */font-size: 14px;          /* 字体大小 */font-weight: bold;        /* 字体粗细 */
}

4.3 -> 尺寸与边距

QPushButton {min-width: 80px;          /* 最小宽度 */max-width: 200px;         /* 最大宽度 */height: 30px;             /* 固定高度 */padding: 5px 10px;        /* 内边距 */margin: 2px;              /* 外边距 */
}

4.4 -> 渐变与图像

QPushButton {/* 线性渐变 */background: qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #3498db, stop:1 #2980b9);/* 径向渐变 */background: qradialgradient(cx:0.5, cy:0.5, radius: 0.5,fx:0.5, fy:0.5,stop:0 white, stop:1 green);/* 使用图像 */border-image: url(:/images/button.png) 3 3 3 3 stretch stretch;
}

5 -> 复杂控件样式化

5.1 -> QComboBox 样式

QComboBox {border: 1px solid #cccccc;border-radius: 3px;padding: 1px 18px 1px 3px;min-width: 6em;
}QComboBox::drop-down {subcontrol-origin: padding;subcontrol-position: top right;width: 15px;border-left-width: 1px;border-left-color: darkgray;border-left-style: solid;border-top-right-radius: 3px;border-bottom-right-radius: 3px;
}QComboBox::down-arrow {image: url(:/images/down_arrow.png);width: 10px;height: 10px;
}

5.2 -> QSlider 样式

QSlider::groove:horizontal {border: 1px solid #999999;height: 8px;background: #f0f0f0;border-radius: 4px;
}QSlider::handle:horizontal {background: #3498db;border: 1px solid #2980b9;width: 18px;margin: -5px 0;border-radius: 9px;
}QSlider::sub-page:horizontal {background: #3498db;border-radius: 4px;
}

5.3 -> QTabWidget

QTabWidget::pane {border: 1px solid #cccccc;background: white;
}QTabWidget::tab-bar {alignment: center;
}QTabBar::tab {background: #f0f0f0;border: 1px solid #cccccc;border-bottom: none;padding: 5px 15px;border-top-left-radius: 4px;border-top-right-radius: 4px;
}QTabBar::tab:selected {background: white;margin-bottom: -1px;
}

6 -> 代码示例

6.1 -> 设置文本样式

1. 在界面上创建 label

2. 编辑右侧的 styleSheet 属性,设置样式

此处的语法格式同 CSS,使用键值对的方式设置样式。其中键和值之间使用 :分割。键值对之间使用 ;分割。

另外,Qt Designer 只能对样式的基本格式进行校验,不能检测出哪些样式不被 Qt 支持。比如 text-align: center 这样的文本居中操作,就无法支持。

编辑完成样式之后,可以看到在 Qt Designer 中能够实时预览出效果。

3. 运行程序,可以看到实际效果和预览效果基本一致。

6.2 -> 实现切换夜间模式

1. 在界面上创建一个多行输入框(Text Edit)和两个按钮

objectName 分别是 pushButton_light 和 pushButton_dark

2. 编写按钮的 slot 函数

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_light_clicked()
{// 设置窗口样式this->setStyleSheet("background-color: RGB(240, 240, 240);");// 设置输入框样式ui->plainTextEdit->setStyleSheet("background-color: white; color: black;");// 设置按钮样式ui->pushButton_light->setStyleSheet("color: black;");ui->pushButton_dark->setStyleSheet("color: black;");
}void Widget::on_pushButton_dark_clicked()
{// 设置窗口样式this->setStyleSheet("background-color: black;");// 设置输入框样式ui->plainTextEdit->setStyleSheet("background-color: black; color: white;");// 设置按钮样式ui->pushButton_light->setStyleSheet("color: white;");ui->pushButton_dark->setStyleSheet("color: white;");
}

关于计算机中的颜色表示

计算机中使用 “像素” 表示屏幕上的一个基本单位(也就是一个发亮的光点)。

每个光点都使用三个字节表示颜色,分别是 R(red),G(green),B(blue)一个字节表示(取值范围是 0-255,或者 0x00-0xFF)。

混合三种不同颜色的数值比例,就能搭配出千千万万的颜色出来。

  • rgb(255, 0, 0) 或者 #FF0000 或者 #F00 表示纯红色。
  • rgb(0, 255, 0) 或者 #00FF00 或者 #0F0 表示纯绿色。
  • rgb(0, 0, 255) 或者 #0000FF 或者 #00F 表示纯蓝色。
  • rgb(255, 255, 255) 或者 #FFFFFF 或者 #FFF 表示纯白色。
  • rgb(0, 0, 0) 或者 #000000 或者 #000 表示纯黑色。

当然,上述规则只针对一般的程序而言是这么设定的。实际的显示器,可能是 8bit 色深或者 10bit 色深等,实际情况会更加复杂。

3. 运行程序,点击 “日间模式”,就是浅色背景,深色文字;点击 “夜间模式”,就是深色背景,浅色文字


感谢各位大佬支持!!!

互三啦!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 正则表达式学习

本篇主要学习几个正则表达式匹配符&#xff1a; ^&#xff1a;锚定行首$&#xff1a;锚定行尾\< 或者 \b&#xff1a;锚定词首\>或者 \b&#xff1a;锚定词尾\B&#xff1a;匹配”非单词边界” 下面通过实验彻底掌握&#xff1a; 测试文件内容如下&#xff1a; cat test.…

MIPS汇编快速入门 【龙芯】

一、前言&#xff1a;MIPS与龙芯的渊源 MIPS&#xff08;Microprocessor without Interlocked Pipelined Stages&#xff09;是一种经典的RISC&#xff08;精简指令集&#xff09;架构&#xff0c;以流水线高效、指令简洁、低功耗为特点。龙芯&#xff08;Loongson&#xff09;…

如何对springboot mapper 编写单元测试

如何对springboot mapper 编写单元测试在 Spring Boot 中对 MyBatis Mapper 编写单元测试的核心目标是​​隔离真实数据库依赖​​&#xff0c;验证 SQL 逻辑与数据库交互的正确性。以下是完整的实践指南&#xff0c;涵盖环境配置、测试数据初始化、具体测试用例编写及常见问题…

学习游戏制作记录(数据加密以及主菜单和画面优化)8.27

1.实现数据加密FileDataHandler 脚本&#xff1a;private bool encryptData false;//是否加密public string codeWord "alexdev";//加密码public FileDataHandler(string _dataDirPath, string _fileName, bool _encryptData){dataDirPath _dataDirPath;FileName …

五自由度磁悬浮轴承同频振动抑制:从机理拆解到传递函数验证的核心方案

摘要 五自由度磁悬浮轴承凭借无摩擦、高转速的优势,在航空航天、透平机械等领域应用广泛,但转子不平衡质量引发的同频振动(频率与转子转速一致)始终是制约其精度的核心痛点。本文从转子不平衡振动的物理机理出发,详细推导不平衡力的数学模型,分析位移输出中扰动信号的叠…

CSS 优先级:公司组织架构模型

为什么我的CSS样式不生效&#xff1f; 在网页开发中&#xff0c;你可能经常会遇到一个令人困惑的问题&#xff1a;你明明写了CSS代码&#xff0c;但是样式却不生效&#xff0c;或者出现了意想不到的冲突。你可能会反复检查代码&#xff0c;却找不到任何语法错误。这背后隐藏的原…

Go语言循环语句全解析

循环语句概述循环语句在编程中的作用循环语句是编程中控制程序流程的重要结构&#xff0c;它允许我们重复执行特定代码块&#xff0c;直到满足终止条件。在数据处理、算法实现、系统监控等场景中&#xff0c;循环都发挥着关键作用。典型应用场景&#xff1a;数据处理&#xff1…

基于NXP iMXRT600音频算法开发方法

iMXRT600 是一款高性能的微控制器&#xff0c;在开发音频算法时可按以下步骤和方法进行&#xff1a;1. 开发环境搭建硬件平台准备好 iMXRT600 开发板&#xff0c;确保开发板上具备音频输入输出接口&#xff0c;如 I2S&#xff08;Inter - IC Sound&#xff09;接口用于音频数据…

怎么理解API?

想象一下你去一家餐厅吃饭。你&#xff08;用户&#xff09;不会直接走进厨房告诉厨师怎么做菜&#xff0c;对吧&#xff1f;你会怎么做&#xff1f;你会拿起菜单&#xff0c;查看上面列出的菜品&#xff08;例如“意大利面”&#xff09;、它们的描述和价格。然后&#xff0c;…

系统架构设计师备考第7天——网络协议中间件软件构件

一、网络协议 核心概念 定义&#xff1a;网络协议是计算机通信的“语言规则”&#xff0c;规定了数据格式、传输时序、控制信号等&#xff0c;确保不同系统实体间正常通信。作用&#xff1a;实现资源共享与信息交换的基础。常见类型&#xff1a; 局域网协议&#xff08;LAN&…

《数据之心》

《数据之心》一、故障2045年&#xff0c;中国“天算”量子云中枢第七区。鱼小妖站在控制台前&#xff0c;指尖划过全息屏&#xff0c;蓝光映在她清秀的脸庞上。她的长发如墨&#xff0c;眸子却似星河&#xff0c;倒映着无数跳动的数据流。她是第七区最年轻的系统神经工程师&…

《C++ Primer 第五版》不要返回局部对象的引用或指针

1. 先看一个“看似合理”的例子#include <iostream> using namespace std;int& foo() {int x 10; // 局部变量&#xff0c;存在于栈中return x; // 返回它的引用 }int main() {int& ref foo(); // ref 绑定到了已经被销毁的 xcout << ref &…

2024鸿蒙样题需要掌握的知识点

一、读取json格式文件为对象或数组&#xff0c;显示相应字段1、创建json文件的参数一致的类2、导入类、导入json文件3、循环渲染import router from ohos.router //导入即对象 import books from resources/rawfile/book1.json import { Book } from ../model/BookEntry Compon…

QML Charts组件之坐标轴示例

目录引言&#x1f3af; 运行效果预览&#x1f4da; 相关系列文章五种坐标轴详解与代码实践1. 数值坐标轴&#xff08;ValueAxis&#xff09;示例代码说明2. 对数坐标轴&#xff08;LogValueAxis&#xff09;示例代码说明3. 日期坐标轴&#xff08;DateTimeAxis&#xff09;示例…

Vue3+ElementPlus倒计时示例

按钮文字默认显示“开始倒计时”当点击按钮时&#xff0c;显示正在倒计时(倒计时数字)倒计时结束按钮显示“开始倒计时” 倒计时逻辑 Hooks 函数 hooks/useCountDown.js /*** hooks函数&#xff1a;函数是用于封装和复用组件逻辑的一种机制* 定义&#xff1a;Hooks 是一种在不使…

docker 的网络

1.查看docker里面的网络docker network ls 2.查看某个 Docker 网络的 网关 IP 和 子网段docker network inspect <网络名或ID>

数据挖掘,到底是在挖掘什么?

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

【车载开发系列】CS+ for CC开发环境IDE

【车载开发系列】CS for CC开发环境IDE 【车载开发系列】CS for CC开发环境IDE【车载开发系列】CS for CC开发环境IDE一. 引言二. IDE安装三. 新建工程四. 堆与栈内存的设置1&#xff09;栈内存设置2&#xff09;堆内存设置一. 引言 瑞萨单片机开发环境有三种&#xff1a;estu…

如何将视频从安卓设备传输到Mac?

你是否想要创建备份、释放存储空间&#xff0c;或者分享难忘时刻&#xff1f;你可能想要轻松地将视频从安卓设备复制到MacBook。在本篇关于“如何将视频从安卓传输到Mac”的指南中&#xff0c;我们将介绍五种智能方法&#xff0c;帮助你无缝地复制视频。从传统的WiFi连接方法到…

MyBatis 初识:框架定位与核心原理——SQL 自由掌控的艺术

&#x1f50d; MyBatis 初识&#xff1a;框架定位与核心原理——SQL 自由掌控的艺术 文章目录&#x1f50d; MyBatis 初识&#xff1a;框架定位与核心原理——SQL 自由掌控的艺术&#x1f9e9; 一、为什么需要 ORM 框架&#xff1f;&#x1f4a1; JDBC 的痛点&#xff1a;原始时…