【Qt】界面优化

本文详细介绍了Qt框架中QSS样式表的语法、设置方法,包括指定控件、全局样式、从文件加载样式、选择器(包括类型、ID、子控件和伪类选择器)、样式属性(盒模型)以及登录界面的样式示例。此外,还涵盖了Qt中的绘图基础、绘制形状、画笔和画刷设置,以及特殊绘图设备QPixmap、QImage和QPicture的使用和特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、QSS

1.1 基本语法

1.2 QSS设置方法

1.2.1 指定控件样式设置

1.2.2 全局样式设置

1.2.3 从文件加载样式表

1.2.4 使用Qt Designer编辑样式

1.3 选择器

1.3.1 介绍

1.3.2 子控件选择器

1.3.3 伪类选择器

1.4 样式属性(盒模型)

1.5 代码示例(登录界面)

二、绘图

2.1 基础概念

2.2 绘制各种形状

2.3 设置画笔

2.4 设置画刷

2.5 绘制图片

2.6 画家设置

2.6.1 移动画家设置

2.6.2 保存/加载画家的状态

2.7 特殊的绘图设备

2.7.1  QPixmap

2.7.2  QImage

2.7.3 QPicture


一、QSS

1.1 基本语法

选择器 {
    属性名: 属性值;
}
  • 选择器:描述了"哪个widget要应用样式规则"
  • 属性:是一个键值对,属性名表示要设置哪种样式,属性值表示了设置的样式的值
QPushButton {
    color: red;
}

注意:若通过 QSS 设置的样式和通过 C++ 代码设置的样式冲突,则QSS优先级更高

1.2 QSS设置方法

1.2.1 指定控件样式设置

QWidget 中包含了 setStyleSheet 方法,可以直接设置样式。给指定控件设置样式之后,该控件的子元素也会受到影响

代码示例:子控件受影响

在界面上创建一个按钮

修改widget.cpp,不给按钮设置样式,而是给 Widget 设置样式(Widget是QPushButton的父控件)

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setStyleSheet("QPushButton { color:red }");
}

Widget::~Widget()
{
    delete ui;
}

运行程序,可以看到样式对于子控件按钮同样会生效

1.2.2 全局样式设置

可以通过 QApplication 的 setStyleSheet 方法设置整个程序的全局样式

全局样式优点:

  • 使同一个样式针对多个控件生效,代码更简洁
  • 所有控件样式内聚在一起,便于维护和问题排查

代码示例:使用全局样式

在界面上创建三个按钮

编辑main.cpp,设置全局样式

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    a.setStyleSheet("QPushButton { color:red; }");

    Widget w;
    w.show();
    return a.exec();
}

此时三个按钮的颜色都设置为红色了

代码示例:样式的层叠性

若通过全局样式给某个控件设置了属性1,通过指定控件样式给控件设置属性2,那么这两个属性都会产生作用

在上一个示例代码的基础上,编写widget.cpp,给第一个按钮设置字体大小

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->pushButton->setStyleSheet("QPushButton { font-size:30px; }");
}

Widget::~Widget()
{
    delete ui;
}

运行程序可以看到,对于第一个按钮而言,同时具备了颜色和字体大小样式,而第二、三个按钮只有颜色样式,说明针对第一个按钮,两种设置方式设置的样式叠加了

代码示例:样式的优先级

若全局样式和指定控件样式冲突,则指定控件样式优先展示

在上一个示例代码的基础上,编写widget.cpp,给第二个按钮设置绿色

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->pushButton->setStyleSheet("QPushButton { font-size:30px; }");
    ui->pushButton_2->setStyleSheet("QPushButton { color:green }");
}

Widget::~Widget()
{
    delete ui;
}

在CSS中也存在类似的优先级规则,通常而言都是"局部"优先级高于"全局"优先级,相当于全局样式先"奠定基调",再通过指定控件样式来"特事特办"

1.2.3 从文件加载样式表

上述代码都是把样式通过硬编码的方式设置的,这样使QSS代码和C++代码耦合在一起了,并不方便代码的维护。因此更好的做法是把样式放到单独的文件中,然后通过读取文件的方式来加载样式

代码示例:从文件加载全局样式

在界面上创建一个按钮

创建 resource.qrc 文集,并设定前缀为 /

创建 style.qss 文件,并添加到 resource.qrc 中

style.qss 是需要程序运行时加载的,为了规避绝对路径的问题,仍然使用 qrc 的方式来组织(即把资源文件内容打包到cpp代码中)。Qt Creator没有提供创建 qss 文件的选项,直接右键->新建文件->手动设置文件扩展名为qss即可

使用Qt Creator打开 style.qss 编写内容

QPushButton {
    color: red;
}

修改main.cpp,新增一个函数加载样式,并在main函数中调用上述函数设置样式


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GG_Bond21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值