QSS 样式表 (一)

摘要:
嗯,QSS听起来有点熟悉。是的,QSS的语法与CSS的语法相似。这就是QSS的魔力。要将QSS样式的文本应用于Qt程序,可以使用setStyleSheet函数。

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

先来看一个简单的例子。

 1 #include <QtGui/QPushButton>
 2 #include <QtGui/QWidget>
 3 #include <QTextCodec>
 4 #include <QtGui/QHBoxLayout>
 5 #include <QtGui/QApplication>
 6 
 7 int main(int argc, char *argv[])
 8 {
 9     QTextCodec::setCodecForTr(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
10     QTextCodec::setCodecForLocale(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
11     QTextCodec::setCodecForCStrings(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
12 
13     QApplication app(argc, argv);
14 
15     QWidget *pWidget = new QWidget;
16     QPushButton *pBtn = new QPushButton;
17     pBtn->setText(QObject::tr("我是一个按钮"));
18     QHBoxLayout *pLayout = new QHBoxLayout;
19 
20     pLayout->addWidget(pBtn);
21     pWidget->setLayout(pLayout);
22     
23     pWidget->show();
24 
25     return app.exec();
26 }

运行结果:
QSS 样式表 (一)第1张

不是很好看吧!让我们对以上代码稍做修改:

 1 #include <QtGui/QPushButton>
 2 #include <QtGui/QWidget>
 3 #include <QTextCodec>
 4 #include <QtGui/QHBoxLayout>
 5 #include <QtGui/QApplication>
 6 
 7 int main(int argc, char *argv[])
 8 {
 9     QTextCodec::setCodecForTr(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
10     QTextCodec::setCodecForLocale(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
11     QTextCodec::setCodecForCStrings(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));
12 
13     QApplication app(argc, argv);
14 
15     QWidget *pWidget = new QWidget;
16     QPushButton *pBtn = new QPushButton;
17     pBtn->setText(QObject::tr("我是一个按钮"));
18 
19     // 新添加的代码
20     // 用于 QPushButton 的外观美化
21     // 这句话就是QSS样式
22     // QPushButton{ background-color: rgb(120,120, 120); color: rgb(0, 230, 230); }
23     // 这个函数就是应用样式
24     // setStyleSheet
25     pBtn->setStyleSheet(QObject::tr("QPushButton{ background-color: rgb(120,120, 120); color: rgb(0, 230, 230); }"));
26 
27     QHBoxLayout *pLayout = new QHBoxLayout;
28 
29     pLayout->addWidget(pBtn);
30     pWidget->setLayout(pLayout);
31     
32     pWidget->show();
33 
34     return app.exec();
35 }

以上两段代码比较,第二段代码增加了25行这一行代码,运行效果:

QSS 样式表 (一)第2张

可以看到按钮的外观发生了底色,按钮的文本颜色改变。这就是QSS的神奇之处。

总结:QSS其实就是一段文本,这段文本里指定了控件的外观属性(如背景色、边框、文本)应该使用哪些属性值做改变。QSS 样式文本要想应用在 Qt 程序里,可以使用 setStyleSheet 函数。象本文对QPushButton应用样式,可以调用QPushButton的成员函数setStyleSheet。

免责声明:文章转载自《QSS 样式表 (一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇UML绘图工具——PlantUMLpostman一直转圈圈,无法启动的终极解决方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转]天龙八部服务器端Lua脚本系统

一、Lua脚本功能接口 1. LuaInterface.h/.cpp声明和实现LuaInterface。 LuaInterface成员如下: //脚本引擎 FoxLuaScriptmLua ; //注册器 LuaCFuncRegistermFuncRegister; //场景关联 Scene*mOwner; //已经读取的脚本表 IDTablem_Sc...

使用IOCTL代码实现LCD背光调节

国内这种代码找不到。于是參考了相关代码后完好例如以下代码,且实现方式通过IOCTL代码实现LCD背光调节的功能。 适合场合为平板电脑或者笔记本。主要还是要靠BIOS支持与否。 编译环境使用:Dev-cpp工具编写。 #include <stdio.h> #include <stdlib.h> #include <win...

QList内存释放(看它内部存储的是否是Object,另外还有qDeleteAll)

QList<T> 的释放分两种情况: 1.T的类型为非指针,这时候直接调用clear()方法就可以释放了,看如下测试代码 #include <QtCore/QCoreApplication>#include <QList>#include <QString> int main(int argc, char *...

C++ -- VLD(Visual LeakDetector)内存泄露库的使用

https://blog.csdn.net/xp178171640/article/details/80828530https://blog.csdn.net/xiaoyafang123/article/details/83655356 VLD简介 由于C/C++语言没有所谓的垃圾收集器,内存的分配和释放都需要程序员自己来控制,这会给C/C++程序员带来一...

virt viewer Usbredir USB重定向

编译virt viewer之前执行的configure命令,是没有使能usb-redir相关的功能,virt viewer是否支持usbredir是完全依赖于spice-gtk的。 virt viewer对spice-gtk的依赖关系,可以从virt viewer的configure结果看出来: [html]view plaincopy confi...

C++ 断言

assert宏 (基本概念与用法整理) assert宏的深入学习 1、运行时断言 1.1、assert属于运行时断言,可以在运行时判断给定条件是否为真,如果为真则什么也不做,否则打印一跳错误信息,然后通过abort来终止程。当程序开发阶段,我们可以在debug模式下加入大量的运行时断言,来提高我们程序的健壮性,并且提高开发速度。但是当程序需要发布的时候,大...