博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QSS为Qt程序添加不一样的样式
阅读量:6324 次
发布时间:2019-06-22

本文共 1894 字,大约阅读时间需要 6 分钟。

添加 QSS 样式文件

在 Qt 项目中新建一个或使用已有的 Qt Resource File,在资源文件下面新建一个普通文件,命名为 Light.qss

38a326ade4f49122d06a771d8d722d63.png

Light.qss 添加如下内容:

029b6d53dd2eb173b02dcdec0224d49d.png

这里是模仿 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 个按钮:

c84dbfe192cba3a51cdc9e818ec38e4c.png

如果直接运行这个程序,你会看到按钮还是和上面的图片中所显示的那样,没有任何情景色的变化。我们需要给各个按钮设置不同的属性:

// set propertyui->primary->setProperty("variable", "primary");ui->success->setProperty("variable", "success");ui->warning->setProperty("variable", "warning");

再运行程序,图片就变成这样的多种颜色风格的了:

eb3430172c20c9a6d9739b0ac455329a.png

动态改变样式

上面更改完按钮的样式后,实际上图片样式就固定下来了,做个小测试:

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);

运行程序,再次点击第一个按钮,可以看到如下图所示的内容,第一个按钮变成了绿色:

2914291d80e2c6f589bc81d5e7c010ab.png

再点击一次,它又会变成蓝色。这样就达到了动态改变样式的目的。


本文首发于 BriFuture 的

参考

转载于:https://www.cnblogs.com/brifuture/p/10539322.html

你可能感兴趣的文章
Linux中查看所有正在运行的进程
查看>>
H3CTE京东翰林讲师分享实验2 网络设备基本调试
查看>>
汇正进销存
查看>>
近期学习oracle 数据库总结
查看>>
php apc
查看>>
我的友情链接
查看>>
C#学习视频分享与开发技术QQ交流群
查看>>
bootstrap datetimepicker 时间控件的使用
查看>>
sudo 密码超时时间
查看>>
数学分析原理 定理 6.4
查看>>
数据结构(3)
查看>>
【西交ACM】100 A+B problem
查看>>
分布式系统的面试题14
查看>>
web标准的理解
查看>>
浅谈C中的指针和数组(一)
查看>>
你应该在开始API开发之前知道的事(下)(翻译)
查看>>
反射 -- 业务需求:执行某个类中全部的以test为开头的无参数无返回值的非静态方法。...
查看>>
C#关于值类型和引用类型的备忘
查看>>
JavaScript正则表达式详解
查看>>
用委托在listbox中异步显示信息,解决线程间操作无效,从不是创建控件的线程访问它...
查看>>