温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

【Qt学习笔记】14.界面的样式 (Qt Stylesheet)

发布时间:2020-07-14 20:03:41 来源:网络 阅读:7274 作者:shangluyi 栏目:编程语言

一、StyleSheet的基本用法

StyleSheet : 样式单

Qt中支持StyleSheet技术,将界面的样式定义分离开来。采用和HTML/CSS类似的形式,使用一个文本文件来单独定义样式。

通常,用于定义界面样式的StyleSheet称为“皮肤”


StyleSheet的定义:

定义一个StyleSheet,前面是类名(称为Selector),大括号内是属性定义,支持/**/注释语法

例如:

/* 以GBK保存 */
QLineEdit
{
    background: yello;
}        // 注意末尾没有分号

QPushButon, QLineEdit
{
    color: blue;
}                // 注意末尾没有分号


StyleSheet的使用:

1、设置全局样式:

可以在main函数中,直接给QApplication设置样式,此样式为全局样式

QString style = "QPushbutton{ color: blud; }";
a.setStyleSheet(style);        //a是  QApplication 类型的对象


2、设置窗口样式:

可以给某个窗口对象设置样式

QString style = "QPushbutton{ color: blue; }";
w.setStyleSheet(style);        //w是窗体



样式的重复定义:

1、对同一个对象调用多次setStyleSheet,则后设置的生效,先前的设置全部丢弃。(替换)

2、下层的样式覆盖上层(叠加)

全局样式(上层) >>> 窗口样式 >>> 子窗口样式(下层)

结果:相同的属性发生覆盖,其他部分保留


皮肤文件:

通常,把样式的内容存放到一个文本文件里,然后在程序打开时加载,此文本称为皮肤文件

// 在main中读取皮肤文件的内容
QString style = readfile("skin.css");
a.setStyleSheet(style);

要注意文件的编码,在中文的Windows上编辑文本文件时,默认的是GBK编码



二、StyleSheet的语法——Selector

Selector:主体是类名

1、属性的叠加:在一个stylesheet里,后写的定义会覆盖先写的定义

2、包含本类和子类的定义

3、同一行中,可以写多个类型,以逗号分隔


QPushButton, QLineEdit, QCheckBox
{
    background: color: black;
}



按属性区分:

假如有8个QPushButton,但想将它们 分成2组,分别有不同的样式,怎么实现呢?

一种办法是写一个子类继承QPushButton,然后对这个子类单独设置样式,

但这种场景,Qt已经为我们提供了一种处理方式

之前或许我们就注意到,每个控件都有一个属性: whatsThis

该属性就是用来处理这种场景的。


使用:

QPushButton[whatsThis="classic"]
{
    color: green;
}
QPushButton[whatsThis="modern"]
{
    color: red;
}


此外,还有一种区分方法:按ID区分(即object name,变量名)

QPushButton#btnSearch
{
    color: green;
}

但这种方法有缺陷,通常还是按属性分比较好

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI