当前位置: 首页 > web >正文

【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.xdnf.cn/news/18978.html

相关文章:

  • 深度学习(鱼书)day12--卷积神经网络(后四节)
  • Java项目-苍穹外卖_Day3-Day4
  • 深度解析Structured Outputs:基于JSON Schema的结构化输出实践与最佳方案
  • 8月26日
  • 开发避坑指南(37):Vue3 标签页实现攻略
  • iPhone 17 Pro 全新配色确定,首款折叠屏 iPhone 将配备 Touch ID 及四颗镜头
  • 二、JVM 入门 —— (四)堆以及 GC
  • MATLAB中函数的详细使用
  • Slice-100K:推动AI驱动的CAD与3D打印创新的多模态数据集
  • 『专利好药用力心脑血管健康』——爱上古中医(28)(健康生活是coder抒写优质代码的前提条件——《黄帝内经》伴读学习纪要)
  • Hadoop MapReduce 任务/输入数据 分片 InputSplit 解析
  • VS中创建Linux项目
  • VGVLP思路探索和讨论
  • STL库——vector(类函数学习)
  • 算法编程实例-快乐学习
  • Git:基本使用
  • 校园勤工俭学微信小程序的设计与实现:基于数字化服务生态的赋能体系构建
  • 10分钟快速搭建 SkyWalking 服务
  • 机器学习笔记
  • 【C语言】小游戏:关机程序
  • 【Linux 进程】进程程序替换
  • RAG中使用到的相关函数注释——LangChain核心函数
  • AI出题人给出的Java后端面经(二十仨)(不定更)
  • 【AI论文】FutureX:面向未来预测任务中大语言模型智能体的前沿动态基准测试
  • 【科研绘图系列】R语言在海洋生态学中的应用:浮游植物糖类组成与溶解性有机碳的关系
  • 永磁同步电机无速度算法--传统脉振方波注入法(1)
  • LangGraph
  • 【更新至2024年】2000-2024年各地级市绿色专利数据
  • 【lucene】spancontainingquery
  • 主流的 AI Agent 开发框架