QSS为Qt程序添加不一样的样式
添加 QSS 样式文件
在 Qt 项目中新建一个或使用已有的 Qt Resource File,在资源文件下面新建一个普通文件,命名为 Light.qss:

为 Light.qss 添加如下内容:

这里是模仿 bootstrap 的样式格式,为 QPushButton 添加几种情景色,熟悉之后可以自行添加更多的情景模式。
编写 QSS 样式文件时推荐使用 VSCODE(因为 QtCreator 似乎不支持高亮显示该类型的文件,可能有插件可以支持),上图就是从 VSCODE 中截得图,安装 Qt for Python 这个插件后就能正常高亮这个文件了。
导入 QSS 样式
在 Qt 中导入样式的方法有很多种,可以直接设置 QApplication 对象的 style:
qApp->setStyleSheet("QLineEdit { background-color: yellow }");
或者对某个 QWidget 对象设置 style:
myDialog->setStyleSheet("QLineEdit { background-color: yellow }");
你可以像我一样做,在 MainWindow 的构造函数中添加如下语句:
// MainWindow::MainWindow()
ui->setupUi(this);
QFile styleFile(":/Light.qss");
styleFile.open(QFile::ReadOnly);
QString style = QString::fromUtf8(styleFile.readAll());
setStyleSheet(style);
styleFile.close();
MainWindow 的 ui 文件很简单,仅有 3 个按钮:

如果直接运行这个程序,你会看到按钮还是和上面的图片中所显示的那样,没有任何情景色的变化。我们需要给各个按钮设置不同的属性:
// set property
ui->primary->setProperty("variable", "primary");
ui->success->setProperty("variable", "success");
ui->warning->setProperty("variable", "warning");
再运行程序,图片就变成这样的多种颜色风格的了:

动态改变样式
上面更改完按钮的样式后,实际上图片样式就固定下来了,做个小测试:
void MainWindow::on_primary_clicked()
{
if(ui->primary->property("variable").toString() == "primary") {
ui->primary->setProperty("variable", "success");
} else {
ui->primary->setProperty("variable", "primary");
}
}
添加这段槽函数代码,执行程序,点击上面第一个按钮,颜色并不会变化。以下是摘自官方的说明
Limitations
There are limitations to using this trick. The main one is that the style will not update itself automatically when the value of a property referenced from the style sheet changes. Instead, you must manually trigger an update of the visual appearance of a widget when a styled property changes.
为了动态改变按钮的样式,我们还要添加一些代码:
ui->primary->style()->unpolish(ui->primary);
ui->primary->style()->polish(ui->primary);
运行程序,再次点击第一个按钮,可以看到如下图所示的内容,第一个按钮变成了绿色:

再点击一次,它又会变成蓝色。这样就达到了动态改变样式的目的。
本文首发于 BriFuture 的 个人博客
参考
QSS为Qt程序添加不一样的样式的更多相关文章
- 使用Qss设置QT程序界面的样式和皮肤
1 使用Qss设置QT程序界面的样式和皮肤 1.1 Qss的功能 Qt程序界面中控件的背景图片.大小.字体颜色.字体类型.按钮状态变化等属性可以通过Qss文件来设置,美化UI界面.实 ...
- 怎么给qt程序添加版本信息
windows下的可执行文件的属性中有版本这个信息,她含有版本信息,描述,版权等等.对于qt的程序,要含有这样的信息,该怎么办呢?那就如下操作吧:新建***.rc文件,在rc文件填入下的信息 #if ...
- qt程序添加文件版本号
1.需要一个 *.rc 文件,用以保存相关信息.比如添加一个 app.rc 里面内容如下所示: IDI_ICON1 ICON DISCARDABLE "app.ico" ----- ...
- 【win】【qt5打包】【qt程序打包成一个可执行文件(带图标任何win都可以运行哦)】
[前言] 业务需求将qt程序打包成win可执行文件.咱是做linux的,奈何用的麒麟系统,程序运行在win,好嘛,重新在win qtcreator编译后打包呗. [目标] 1.给qt程序添加一个图标. ...
- Qt 程序和窗口添加图标
Qt项目在打包发布之后都需要有个个性的程序图标和窗口图标,这样会使程序更加美观大方,下面我们分别来看如何给程序和窗口分别添加图标.我们需要两种格式的图片,一种是.ico的,用来给程序添加图标,一种是. ...
- Qt程序打包(使用Enigma Virtual Box和BoxedApp Packer封包)
一.使用单文件封包工具 单文件封包工具,顾名思义就是将可执行文件及其相关依赖打包成单个可执行文件的工具. 这里推荐两个单文件封包工具:Enigma Virtual Box和BoxedApp Packe ...
- VS2010 win7 QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序
下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip, 不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0 ...
- Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)
参考链接: MXE.>大多数程序都是在windows平台下开发的程序.windows 在现实中也是绕不过的一个系统平台,做为受过几年VC,MFC”虐待”的程序员,在做为一个程序员之前是一位Lin ...
- 【转】发布的QT程序无法显示图标和图片的问题
在windows下编译好的QT程序在其他没有安装QT的机器上会出现图标和图片无法正常显示的问题. 这时我们可以通过以下方式来解决: 在release文件夹里创建plugins文件夹,并将QT安装目录下 ...
随机推荐
- jquery stop(true,false)的意思
stop 是jQuery中用于控制页面动画效果的方法.运行之后立刻结束当前页面上的动画效果.stop在新版jQuery中添加了2个参数:第一个参数的意思是是否清空动画序列,也就是stop的是当前元素的 ...
- .Net Core内存回收模式及性能测试对比
.NET Core 两种GC模式: Server GC / Workstation GC Server GC : 主要应用于多处理器系统,并且作为ASP.NET Core宿主的默认配置.它会为每个处理 ...
- Qt keyPressEvent keyReleaseEvent 分析
最近使用Qt时,在增加一个按下某键(M),临时显示图层,键(M)弹起时隐藏图层的功能时,碰到了一些问题: keyPressEvent 事件不响应 这个问题,网上搜到的结果是可能是控件没获取焦点,比如Q ...
- 整理javascript基础
原始类型值(Primitive values) 下面的全是原始类型值(简称:原始值): 布尔类型:true,false 数字类型:1736,1.351 字符串类型: 'abc',"abc&q ...
- [ActionScript 3.0] 十进制与二进制,十六进制等数据之间的相互转换
将十进制转换为二进制,方法是:将数字除以2,根据余数来从右往左排列二进制的位数,如下以十进制数10为例 10除以2得5,余数为0,故第一个位置为0: 5除以2得2,余数为1,故第二个位置为1: 2除以 ...
- 初学C#,用vs去开始hello world!
小弟初学c#,刚刚学会用vs来编写经典的hello,world程序,记录,并且分享给大家. 1. 用vs新建一个c#控制台程序: a. 首先打开vs,如下图所示,点击[新建项目]
- javascript 判断对象的内置类型
判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法.在toString方法被调用时,会执行下面的操作步骤:1. 获取this对象的[[Class ...
- 题目1018:统计同成绩学生人数(hash简单应用)
问题来源 http://ac.jobdu.com/problem.php?pid=1018 问题描述 给你n位同学的成绩,问获得某一成绩的学生有多少位. 问题分析 初见此题,有人会想到先将所有成绩存入 ...
- [原创] Shell 参数传递 与 默认值
目录 简介 基本传参 $* 与 $@ 区别 默认参数(变量默认值) if 繁琐方式 - 变量为null = 变量为null时, 同时改变变量值 :- 变量为null 或 空字符串 := 变量为null ...
- php fputcsv 读取不到中文文件、数据
string setlocale(constant,location) constant 必需.规定应该设置什么地区信息. 可用的常量: LC_ALL - 包括下面的所有选项 LC_COLLATE ...