Qt 实战(11)样式表 | 11.2、使用样式表

文章目录

  • 一、使用样式表
    • 1、盒子模型
    • 2、应用样式表
      • 2.1、全局应用
      • 2.2、局部应用
      • 2.3、通过文件应用
    • 3、使用样式表实现换肤

前言:

在Qt框架中,样式表(Style Sheets)是一种功能强大的工具,它允许开发者以一种简洁而高效的方式自定义应用程序的用户界面。Qt样式表借鉴了Web开发中CSS的概念,使得开发者能够轻松调整组件的外观,包括颜色、字体、边框、边距等。本文将详细介绍如何使用Qt样式表来美化应用程序界面。

一、使用样式表

1、盒子模型

Qt样式表的盒子模型(Box Model)是一种用于描述Qt组件(widgets)布局和尺寸的概念框架。它借鉴了Web开发中CSS的盒子模型,使得Qt开发者能够以统一和直观的方式管理组件的外观和布局。盒子模型由以下几个关键部分组成:

在这里插入图片描述

  • 内容区域(Content ): 这是组件的实际显示区域,例如按钮的标签、文本框的文本等。
  • 填衬(Padding): 填衬是围绕内容区域的内边距,用于在内容和边框之间提供空间。填衬可以是均匀的,也可以针对每个方向(上、右、下、左)单独设置。
  • 边框(Border): 边框是围绕填衬和内容区域的边界线,用于定义组件的边界和外观。边框的宽度、样式(如实线、虚线、点线等)和颜色都可以自定义。
  • 边距(Margin): 边距是组件外部的空间,用于在组件与其他组件或容器边界之间提供距离。边距同样可以是均匀的,也可以针对每个方向单独设置。

2、应用样式表

Qt样式表可以通过多种方式应用到应用程序中:

2.1、全局应用

使用QApplication::setStyleSheet()函数,将样式表应用到整个应用程序。

QApplication app(argc, argv);  
app.setStyleSheet("QPushButton { background-color: lightblue; color: darkblue; font-size: 16px; }");

2.2、局部应用

使用QWidget::setStyleSheet()函数,将样式表应用到特定的窗口或组件。

QPushButton *button = new QPushButton("Click Me", this);  
button->setStyleSheet("background-color: lightgreen; color: darkgreen;");

2.3、通过文件应用

将样式表定义保存为.qss文件,然后在程序中读取该文件并应用样式表。

  • 创建.qss文件:

新建一个style1.qss文件,放在工程目录下,文件内容如下:

QPushButton
{border-radius:5px;background:rgb(150, 190, 60);color:red;font-size:15px;
}

style1.qss文件与resource.qrc文件目录结构如下:

工程目录--- resource.qrc- style1.qss

resource.qrc文件中配置style1.qss文件信息,如下:

<RCC><qresource prefix="/qss"><file>style1.qss</file></qresource>
</RCC>
  • 代码中使用.qss文件:
QPushButton *button = new QPushButton("Click Me", this);
QFile file(":/qss/style1.qss");
if (file.open(QFile::ReadOnly | QFile::Text)) {QTextStream ts(&file);button->setStyleSheet(ts.readAll());
}

3、使用样式表实现换肤

以下是一个具体的示例,展示如何在Qt中使用样式表实现换肤功能。

  • 添加控件和布局:

mainwindow.ui文件中,添加一个QPushButton用于切换样式表,以及一个QLabel用于显示一些文本,以便可以看到样式表的变化。代码如下:

#include "mainwindow.h"  
#include "ui_mainwindow.h"  
#include <QFile>  
#include <QTextStream>  
#include <QMessageBox>  MainWindow::MainWindow(QWidget *parent)  : QMainWindow(parent)  , ui(new Ui::MainWindow)  
{  ui->setupUi(this);  // 加载默认样式表  loadStyleSheet("default.qss");  // 连接按钮点击信号到槽函数  connect(ui->changeSkinButton, &QPushButton::clicked, this, &MainWindow::changeSkin);  
}  MainWindow::~MainWindow()  
{  delete ui;  
}  void MainWindow::loadStyleSheet(const QString &styleSheetName)  
{  QFile file(":/qss/" + styleSheetName);  if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {  QMessageBox::warning(this, tr("Warning"), tr("Unable to open %1.").arg(styleSheetName));  return;  }  QTextStream in(&file);  QString styleSheet = in.readAll();  this->setStyleSheet(styleSheet);  
}  void MainWindow::changeSkin()  
{  // 切换样式表,这里简单地在两个样式表之间切换  static bool isDefault = true;  if (isDefault) {  loadStyleSheet("dark.qss");  } else {  loadStyleSheet("default.qss");  }  isDefault = !isDefault;  
}
  • 创建样式表文件:

在项目的资源文件(通常是qrc文件)中,添加两个样式表文件default.qss和dark.qss。

default.qss

QWidget {  background-color: white;  color: black;  font-size: 16px;  
}  QPushButton {  background-color: lightgray;  border: 2px solid gray;  padding: 5px;  border-radius: 5px;  
}  QPushButton:hover {  background-color: gray;  color: white;  
}  QLabel {  margin: 20px;  
}

dark.qss

QWidget {  background-color: #333333;  color: white;  font-size: 16px;  
}  QPushButton {  background-color: #666666;  border: 2px solid #888888;  padding: 5px;  border-radius: 5px;  
}  QPushButton:hover {  background-color: #888888;  color: #cccccc;  
}  QLabel {  margin: 20px;  
}
  • 配置资源文件:

配置资源文件,确保资源文件包含样式表文件。例如:

<RCC><qresource prefix="/qss"><file>default.qss</file><file>dark.qss</file></qresource>
</RCC>

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

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

相关文章

怎么把本地代码上传到阿里云里面

项目需求 将本地项目上传到阿里云&#xff0c;一般有两种情况 1.在本地创建的项目&#xff0c;没有关联过其他的git远程仓库。 2.从其他项目复制的项目代码&#xff0c;但是想要以此项目为基础重新创建一个新的项目。 解决方式 第一种 第一种项目很好解决&#xff0c;就按…

LeetCode题练习与总结:路径交叉--335

一、题目描述 给你一个整数数组 distance 。 从 X-Y 平面上的点 (0,0) 开始&#xff0c;先向北移动 distance[0] 米&#xff0c;然后向西移动 distance[1] 米&#xff0c;向南移动 distance[2] 米&#xff0c;向东移动 distance[3] 米&#xff0c;持续移动。也就是说&#xf…

从安灯系统看汽车零部件工厂的智能制造转型

在当今快速发展的制造业领域&#xff0c;汽车零部件工厂正面临着日益激烈的市场竞争和不断提高的客户需求。为了在竞争中脱颖而出&#xff0c;实现可持续发展&#xff0c;许多汽车零部件工厂纷纷踏上智能制造转型之路。而安灯系统作为一种重要的生产管理工具&#xff0c;在这场…

Nginx可视化管理平台nginxWebUI(1)【保姆级部署方式】

目录 nginxWebUI简介 1.概述&#xff1a; 2.功能 NginxWebUI的部署方式 实验环境&#xff1a; 1.安装JDK环境、nginx和nginx程序 2.启动nginxWebUI 3.使用浏览器登录webUI 访问格式&#xff1a; 登陆成功后我们就来到了它的可视化管理页面 nginxWebUI简介 1.概述&am…

面试总结一

面试总结 1、自我介绍一下自己2.面试11、css常用布局有哪些2、css常用的属性3.js原型链4、开发中遇到的技术难点5、闭包6、ts了解什么呢7.git都用什么命令8、vue怎么打包9.vue启动一个项目需要什么10、vue怎么创建一个项目 2.面试21.vue2和vue3有什么区别2.复杂组件的封装&…

vue-element-admin顶部导航栏的修改

基于vue-element-admin的顶部一级导航栏的调整&#xff0c;因为一级路由过多导致其他元素被挤到第二行&#xff0c;故现在将原来一级路由数组拆分成两个数组&#xff0c;第二个数组以子菜单显示 关键处调整代码 html <el-menu:active-text-color"variables.menuActiv…

如何为自己的跨境网站添加多国语言翻译功能及推荐起尔网定制与插件开发

如何为自己的跨境网站添加多国语言翻译功能及推荐起尔网定制与插件开发 在全球化的浪潮下&#xff0c;跨境电商成为越来越多企业拓展国际市场的重要途径。然而&#xff0c;语言障碍成为了一个不可忽视的问题。为了更好地服务全球用户&#xff0c;为自己的跨境网站添加多国语言…

199116-50-2,Mito-Tracker Orange CMTMRos是一种高亲和力的线粒体染色剂

一、基本信息 中文名称&#xff1a;线粒体橙色荧光探针 英文名称&#xff1a;Mito-Tracker Orange CMTMRos CAS号&#xff1a;199116-50-2 分子式&#xff1a;C24H24Cl2N2O 分子量&#xff1a;427.37 存储条件&#xff1a;避光、冷藏保存&#xff0c;避免长时间暴露于光线…

基于SSM健身国际俱乐部系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;场地类别管理&#xff0c;场地信息管理&#xff0c;运动项目管理&#xff0c;场地类型管理&#xff0c;项目类型管理 用户账号功能包括&#xff1a;系统首页&#xff0c;个人中心…

QML----Webengineview点击网页上的下载没反应,下载文件

问题 使用webe加载网页时&#xff0c;点击下载页面会没有反应。原因就是它默认是关闭下载功能 解决 需要在profile里监听下载事件打开onDownloadRequested,当有下载时会触发这个信号,会获取到一个WebEngineDownloadItem这是下载的东西,查询它的一些相关参数,可以修改路径和开…

网站前端登录加密方案调查

https://zhuanlan.zhihu.com/p/625204114 案例 国家政务服务平台 账号设置 (gjzwfw.gov.cn) 方案 代码混淆Rsa公钥加密https协议 案例 LOFTER&#xff08;乐乎&#xff09; - 让兴趣&#xff0c;更有趣 方案 sha256https Sign in GitLab (secxun.com) 方案 不加密内网 凤凰…

mysql视图介绍(本质,修改数据时的表现,排序覆盖)

目录 视图 介绍 语法 使用 本质 修改数据 排序覆盖 视图 介绍 是一种虚拟表&#xff0c;它不存储实际的数据&#xff0c;而是基于查询结果动态生成数据 将查询结果以表结构保存视图和基表之间会互相影响 视图可以基于一张或多张表来创建&#xff0c;并且可以像普通表一样…

List、Set、数据结构、Collections

一、数据结构 1.1 常用的数据结构 栈 栈&#xff1a;stack,又称堆栈&#xff0c;它是运算受限的线性表&#xff0c;其限制是仅允许在标的一端进行插入和删除操作&#xff0c;不允许在其他任何位置进行添加、查找、删除等操作。 简单的说&#xff1a;采用该结构的集合&#…

Clickhouse笔记(二) 集群搭建

0.集群规划 操作系统使用ubuntu2204server&#xff0c;8C8G100G。 节点分片部署192.168.50.5分片1副本1clickhouse-server/clickhouse-client/keeper192.168.50.6分片1副本2clickhouse-server/clickhouse-client/keeper192.168.60.7分片2副本1clickhouse-server/clickhouse-c…

ECharts饼图-饼图纹理,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个饼图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供详…

day7:软件包管理

一&#xff0c;软件包概述 软件包概述 软件包用于安装&#xff0c;升级&#xff0c;卸载一个软件 软件包类型 二进制包 源码经过了编译&#xff08;而且成功了&#xff09;后产生的包&#xff0c;二进制包是linux下默认的安装包 编译好的文件&#xff0c;直接使用&#xff…

音质最好的麦克风有哪些?领夹麦克风哪个品牌好?麦克风十大品牌

在当下自媒体行业蓬勃发展的背景下&#xff0c;无线领夹麦克风已成为众多内容创作者不可或缺的装备。市场上的无线领夹麦克风种类繁多&#xff0c;品质参差不齐&#xff0c;价格也相差悬殊&#xff0c;这使得选购一款合适的麦克风变得颇具挑战性。许多消费者在追求性价比的过程…

无人机避障——路径规划篇(一) JPS跳点搜索算法A*算法对比

JSP 跳点搜索算法与改进 A*算法对比 一、算法概述: 跳点搜索(Jump Point Search,JPS)算法:一种用于路径规划的启发式搜索算法。它主要用于在网格地图(如游戏地图、机器人运动规划地图等)中快速找到从起点到终点的最短路径。该算法在改进 A*算法的基础上进行了优化,通过跳过一…

自由学习记录(12)

综合实践 2D的Shape&#xff0c;Tilemap都要导包的&#xff0c;编辑器也要导包&#xff0c;。。和2d沾边的可能3d都要主动导包 应该综合的去运用&#xff0c;不见得Tilemap就很万能&#xff0c;如果要做什么顶方块的有交互反应的物体&#xff0c; 那直接拖Sprite会更方便一些…

大路灯护眼灯是智商税吗?五款口碑最好的落地灯品牌分享

大路灯护眼灯是智商税吗?在当前照明灯具中&#xff0c;护眼灯大路灯并不是智商税&#xff01;护眼大路灯因其出色的灯光和舒适度效果而受到广泛欢迎。面对市场众多的护眼大路灯产品&#xff0c;选择一把优质的护眼大路灯显得尤为重要。低质量的护眼大路灯不仅性能不佳&#xf…