qss简介

qss(Qt Style Sheets)是一种基于CSS的样式语言,用于描述用户界面元素的外观和感觉。qss可以让用户在不修改代码的情况下,轻松地自定义应用程序的外观。

其语法基本如下:

objectName{
property: value;
}

其中,objectName是要设置样式的对象名,property是要设置的属性,value是属性的值。比如,要设置按钮的背景色为红色,可以这样写:

QPushButton{
background-color: red;
}

若想对同一控件设置多套样式,可以指定姓名

QLabel#label1{
background-color: blue;
}
QLabel#label2{
background-color: green;
}

在程序中使用setObjectName();方法设置控件名称对应到qss中的名称即可使用对应的样式。

QLabel *label = new QLabel(this);
label->setObjectName("label1"); // 此label背景色为蓝色
QLabel *label2 = new QLabel(this);
label2->setObjectName("label2"); // 此label背景色为绿色

对于一些拥有不同状态的控件,如按钮在普通状态以下按下状态,以及鼠标悬停状态等,可以用不同的qss样式表实现不同状态的样式。

QPushButton:pressed{
background-color: green;
}
// 按下按钮时改变背景颜色为绿色 QPushButton:hover{
background-color: yellow;
}
// 鼠标悬停在按钮上时改变背景颜色为黄色

可以混合使用,比如:

QPushButton#btn1:pressed{
background-color: green;
}
// 按下btn1按钮时改变背景颜色为绿色

qrc文件

对于样式表,可以使用一个后缀为.qrc的文件来管理.qss以及编写时所用的图片资源。其实质上就是一个xml文件,里面可以包含多个<file>标签,每个标签对应一个资源文件。

<RCC>
<qresource prefix="/">
<file>ui/img/img.png</file>
<file>ui/img/close.png</file>
<file>ui/img/min.png</file>
<file>ui/img/max.png</file>
<file>ui/img/R.svg</file>
<file>ui/style/style.qss</file>
</qresource>
</RCC>

其中<RCC>表示该文件为资源文件集合,<qresource>表示资源文件,prefix属性表示资源文件的前缀,这里设置为/表示资源文件位于程序根目录下。<file>标签表示资源文件名,这里可以指定多个资源文件。

注意,这里使用prefix设置的路径是虚拟路径。在下面的<file> </file>中设置的资源文件的路径应当是相对于.qrc文件的路径。这样设置后,在程序中可以通过如下方式获取资源文件:

QFile file(":/ui/style/style.qss");
/*通过":"表示使用虚拟路径访问文件*/

倘若更改prefix如下

<qresource prefix="/source">

则在程序中获取资源文件时,应当使用如下方式:

QFile file(":/source/ui/style/style.qss");
/*通过":"表示使用虚拟路径访问文件*/

也就是说这里定义的虚拟路径不需要它在物理地址中存在,即可使用Qt这种资源管理机制来管理资源文件。方便的实现资源的分组、共享以及版本控制。

设置好.qrc文件后,在程序中可以用如下方式获取资源文件中整合的文件:

QFile file(":/ui/style/style.qss");
/*通过":"表示资源文件*/

qss文件中,也可以使用这种方法来引用资源文件中的资源:

QLabel{
background-image: url(":/ui/img/img.png");
}

Vscode应用qss样式表

在扩展安装界面安装QSSEditor插件,这样可以提供qss相关的代码补全以及高亮显示功能。

在写qss时,可能输出以下,大概是由于这个插件可以联动QtDesigner来实时显示样式。这方面我也不太会。不影响对qss代码的补全高亮。

建立文件树如下的目录结构:

├── ui
│   ├── img
│   │   ├── close.png
│   │   ├── img.png
│   │   ├── max.png
│   │   ├── min.png
│   │   └── R.svg
│   └── style
│   └── style.qss
└── ui.qrc

名称任意取。其中ui.qrc文件的要求上面已经说明。若要使用该文件,需要修改CMakeLists.txt文件,添加如下内容:

find_package(Qt5 REQUIRED COMPONENTS Core Widgets REQUIRED)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON) # RCC编译器将qrc文件编译为cpp文件
set(CMAKE AUTOUIC ON)
# 注意 : 要想使用qt5_add_resources,必须先find_package到Qt的路径或者手动指定QT_DIR
set(QT_SOURCE_FILE ui.qrc) # 将资源文件放到工程目录下,该部分会由RCC编译器预编译为cpp文件 # 添加资源文件
qt5_add_resources(QT_RESOURCES ${QT_SOURCE_FILE}) # 添加源文件
set(SOURCE_FILES main.cpp) # 生成可执行文件
add_executable(main ${SOURCE_FILES} ${QT_RESOURCES})

这样在主程序中就可以通过Qt的资源管理机制来访问资源文件了。

要想应用qss样式表,在主程序中调用setStyleSheet()方法即可。

#include <QApplication>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QFile file(":/ui/style/style.qss"); # 读取样式表文件
if (file.open(QFile::ReadOnly))
{
QTextStream stream(&file);
QString styleSheet = stream.readAll();
app.setStyleSheet(styleSheet);
}
MainWindow win;
win.show();
return app.exec();
}

当然,在Qt中,每个控件都有属于自己的setStyleSheet()接口用于单独设置样式,用起来也是很简单粗暴,其参数是一个qss样式表字符串。

QLabel *label = new QLabel(this);
/*设置label的背景色为红色*/
label->setStyleSheet("background-color: red;");
/*当然下面这种写法也ok*/
label->setStyleSheet("QLabel{background-color: red;}");

Vscode实现应用qss样式表的更多相关文章

  1. Qt系统对话框中文化及应用程序实现重启及使用QSS样式表文件及使用程序启动界面

    一.应用程序中文化 1).Qt安装目录下有一个目录translations/,在此目录下有qt_zh_CN.ts和 qt_zh_CN.qm把它们拷贝到你的工程目录下. 2).在main函数加入下列代码 ...

  2. GUI学习之三十四——QSS样式表

    今天是一个大课题:QSS样式表 一.概念: QSS是Qt Style Sheet——Qt样式表,是用来自定义控件外观的一种机制;可以把他类比成CSS,但是不及其功能强大. 二.使用: 我们做一个模板, ...

  3. QT源码剖析之QSS样式表

    1. "QApplication::setStyleSheet()"设置样式表: 1. 创建新的样式表. 2. 设置新的样式. void QApplication::setStyl ...

  4. QSS 样式表 (一)

    在开发应用程序时,往往对界面的美观有一定的要求.Qt 引入了 QSS 机制,使得界面的美化工作变的轻轻松松.嗯,QSS听着有点耳熟.是的,QSS的语法和CSS类似.在此做些总结. 先来看一个简单的例子 ...

  5. QSS样式表之PS黑色风格+白色风格+淡蓝色风格(开源)

    用QUI皮肤生成器制作皮肤,基本上不超过一分钟就可以生成一套自己想要的皮肤,只要设置八种颜色即可.本人非常喜欢这套黑色风格样式皮肤,特意分享出来,下载地址:https://download.csdn. ...

  6. Qss 样式表的尝试

    QLineEdit{ border:1px solid #137eb6; padding:2px; background-color:#F5F5F5; } QToolTip{ border:1px s ...

  7. 【转】QT样式表 (QStyleSheet)

    作者:刘旭晖 Raymond 转载请注明出处Email:colorant@163.comBLOG:http://blog.csdn.net/colorant/ 除了子类化Style类,使用QT样式表( ...

  8. Qt样式表使用注意项

    Qt样式表使用注意项 <1>.StyleSheet的使用StyleSheet文件的默认后缀名为qss,可以通过命令行参数-stylesheet filename.qss来设置样式表,也可以 ...

  9. Qt样式表的使用

    Qt中可以灵活的使用层叠样式表(CSS),其语法和CSS很相似.因为HTML CSS的灵活性,所以可以很方便的为QT界面设计自己需要的外观.除了子类化Style类,使用QT样式表(QStyleShee ...

  10. Qt 之 QSS(样式表语法)

    https://blog.csdn.net/liang19890820/article/details/51691212 简述 Qt样式表(以下统称QSS)的术语和语法规则几乎和CSS相同.如果你熟悉 ...

随机推荐

  1. meminfo一些容易混淆的点

    MemTotal: 688576 kB 总内存 MemFree: 153736 kB 空闲内存 MemAvailable: 339884 kB 可用内存 Buffers: 16 kB 给文件的缓冲大小 ...

  2. arm64 下内核 crash—— 非法地址

    下面是在实际工作中遇到的一次内核(5.4.110)访问非法内存地址(空指针)导致出错的现场,在这里记录一下简单的分析流程为以后遇到类似的问题作为参考. [ 220.619861] Unable to ...

  3. 墨天轮沙龙 | 腾讯云陈昊:TDSQL-C Serverless应用与技术实践

    导读 数据库的发展由对性能的要求,逐步发展为对更为极致成本的要求,Serverless数据库是在高性能云数据库之上的极致成本优化方案.[墨天轮数据库沙龙-Serverless专场]邀请到腾讯云数据库产 ...

  4. 未来“数”于你 | 墨天轮携手 Vertica 发布技术文章征集令,双重大奖蓄势待“发”

    作为新一代数据分析平台,Vertica凭借高性能.高可用性以及混合模式部署的底层架构等特点,为国内电信.金融行业提供了较多的整体解决方案. 今天,Vertica 限时开放体验,同时,MacBook P ...

  5. C++ 第四节课 C和C++指针的区别 C的宏函数和C++内联函数的优缺点

    #include <iostream> // 定义一个宏函数 #define ADD(x,y) x+y; // 宏函数具有速度快等特点 但是写代码有些业务比较繁琐,所以C++中使用了内联函 ...

  6. centos7安装python3.12

    centos7 安装升级 python3.12 centos7 默认的 gcc 和 g++ 版本都很低,在有 --enable-optimizations 选项时会编译报错,因此要在 scl 环境下编 ...

  7. apisix~按域名进行请求转发

    路由route 路由(Route)是请求的入口点,它定义了客户端请求与服务之间的匹配规则.路由可以与服务(Service).上游(Upstream)关联,一个服务可对应一组路由,一个路由可以对应一个上 ...

  8. kotlin协程——>组合挂起函数

    默认顺序调用 假设我们在不同的地⽅定义了两个进⾏某种调⽤远程服务或者进⾏计算的挂起函数.我们只假设它们都是有⽤的,但是实际上它们在这个⽰例中只是为了该⽬的⽽延迟了⼀秒钟: suspend fun do ...

  9. Blazor 调用 Clipboard API 读写剪贴板数据

    目录 简介 使用JS互操作 使用ClipLazor库 创建项目 使用方法 简单测试 参考链接 简介 Clipboard API 是一种允许网页读取剪贴板数据或向其中写入数据的API,主要有两个方法: ...

  10. 背靠AI,让AI当牛马,解决程序员的烦恼

    开篇问题? 作为程序员的你,写代码累吗?累!苦嘛?苦,想哭嘛?哭不出来. 还在为工作中繁重的编码任务.复杂的调试过程以及不断更新的技术栈而苦恼吗?这些挑战不仅消耗大量的时间和精力,还时常让人陷入思维的 ...