Qt6教程之三(2) QT使用qss

2023-11-12

QSS是Qt Style Sheets的缩写,中文含义是Qt样式表,它用来自定义控件外观的机制。QSS与网页中使用的CSS非常相似,可以把QSS看作是CSS在Qt领域领域的定制版本。

QSS的语法规则

选择器 {  规则定义1; 规则2; 规则n ; } ; 

如下示例:

QPushButton {
    border: 2px solid $border;
    border-radius: 9px;
    padding: 1px 10px;
    min-width: 80px;
    min-height: 34px;
}

QPushButton表示选择器,指定了QPushButton及QPushButton的子类均会受到影响,这是与CSS中不同的地方。在Qt中所有的控件在使用QSS时均遵循这个规则。

QSS的选择器类型

1.通配选择器:*  ; 匹配所有的控件
2.类型选择器:如QPushButton ,其含义是匹配所有QPushButton和其子类实例;
3.属性选择器:如QPushButton[color="red"]; 
4.类选择器:  .QPushButton ;  匹配所有QPushButton的实例;
5.ID选择器:  #button; 匹配所有id为button的控件实例;
6.后代选择器: 如QDialog QPushButton ; 所有QDialog容器中包含的QPushButton;
7.子选择器:  如QDialog > QPushButton; 所有QDialog容器下面的QPushButton;

这里并不打算讲解很多的理论,有兴趣的小伙伴可参悦其他人写得非常好的一篇博客:https://www.cnblogs.com/wangqiguo/p/4960776.html

同时也可参阅QSS官网文档:

Qt Style Sheets Reference | Qt Widgets 5.15.12

QSS在Qt程序中使用

主要通过 setStyleSheet(QString str)  函数引入,可以直接在函数里面写对于的qss内容:

#include "mainwindow.h"

#include <QPushButton>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QPushButton *bt=new QPushButton("button",this);
    bt->setStyleSheet("QPushButton{color:red;  background-color:blue;}");
}

MainWindow::~MainWindow()
{
}

也可以先把qss定义作为一个文件,后缀为.qss ,如my.qss ,

#include "mainwindow.h"

#include <QFile>
#include <QPushButton>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QPushButton *bt=new QPushButton("button",this);
    //bt->setStyleSheet("QPushButton{color:red;  background-color:blue;}");

    QFile *sf;
        sf  = new QFile(":/my.qss", this);
        sf->open(QFile::ReadOnly);
        QString styleSheet = QString(sf->readAll());
        bt->setStyleSheet(styleSheet);
        sf->close();
}

MainWindow::~MainWindow()
{
}


编辑qss的神器推荐

这款神器叫QssStylesheetEditor ,支持qss语法提示,同时在写完样式之后,还能在右侧预览实时效果,详情参见如下链接:

mirrors / hustlei / QssStylesheetEditor · GitCode

总结

学习qss只需掌握其方法,对于qss相关的一些属性根据实际需求查询官方文档即可,不必全部记住。因为每个控价都有自己独特的属性与样式定义,全部记下是不可能的!

示例程序完整源码:

main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"

#include <QFile>
#include <QPushButton>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{

    resize(800,800);
    setWindowTitle("QSS");


    //define qss string
    QString s="QPushButton{color:red;  background-color:blue; font-size:20px; padding: 20px;}"
              "QPushButton:pressed{color:blue; background-color:yellow;}" ;

    QPushButton *bt=new QPushButton("button",this);
    bt->setGeometry(200,200,100,100);
    bt->setStyleSheet(s);

    
}

MainWindow::~MainWindow()
{
}

运行效果: 当点击按钮后,背景颜色会变为yellow ;

此篇博客内容较为简单,更多的是讲解如何使用qss的方法与技巧,之后涉及到相关属性直接查询官方文档即可!

下一篇博客链接:

Qt6教程之三(3) QtWedget自定义控件_爱折腾的业余程序员的博客-CSDN博客本篇博客主要介绍自定义控件的方法!https://blog.csdn.net/XiaoWang_csdn/article/details/129292061?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22129292061%22%2C%22source%22%3A%22XiaoWang_csdn%22%7D

上一篇博客链接: Qt6教程之三(1) Qt开发基于Windows、Linux系统的桌面软件客户端_爱折腾的业余程序员的博客-CSDN博客本篇文章主要介绍Qt的跨平台原理!https://blog.csdn.net/XiaoWang_csdn/article/details/129230190

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt6教程之三(2) QT使用qss 的相关文章

  • 仅将非模态 QDialog 窗口放置在我的应用程序顶部,而不是所有应用程序顶部

    我有一个 QDialog 窗口 它应该始终位于我的应用程序顶部 它不是模态的 用户可以随时与对话框和主应用程序进行交互 使用窗口保持在顶部提示在某种程度上实现了这一点 但是 该对话框仍然位于所有其他正在运行的应用程序 例如记事本 chrom
  • QGraphicsView 和 eventFilter

    这个问题已经困扰我两天多了 所以我想我应该问一下 我在Win7上使用Qt 4 5 3 用VC2008编译 我有 MyGraphicsView 继承 QGraphicsView 和 MyFilter 继承 QObject 类 当我将 MyFi
  • 当 QML 对象不可见时防止 QML 属性绑定?

    我正在开发一个具有大量属性绑定的 QML 应用程序 数百个对象被跟踪并以不同的形式显示 例如 Qt3D QCanvas 当我在应用程序的单独页面上时 x y 位置和相对大小的属性绑定仍在发生 我怎样才能阻止他们 我知道我可以根据属性是否可视
  • Qt/c++ 随机字符串生成[重复]

    这个问题在这里已经有答案了 我正在创建一个应用程序 需要生成多个随机字符串 几乎就像一个由一定长度的 ASCII 字符组成的唯一 ID 这些字符混合有大写 小写 数字字符 有没有 Qt 库可以实现这一点 如果没有 在纯 C 中生成多个随机字
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • QT/QML Android App,点击通知栏时打开应用程序

    我为 Android 应用程序制作了一个 QT 当我单击平板电脑中上面看到的按钮通知栏时 但是 如果单击通知 我的应用程序将打开 聚焦 不知道 并显示黑色窗口 简单来说怎么做呢 我的代码是 package org ays operation
  • 如何在带有预编译头的项目中使用google protobuf

    我有一个包含多个项目的解决方案 我的项目 但不是全部 使用预编译头 我决定使用 protobuf 但遇到了一个问题 在 protoc exe 从 proto 生成 pb h 后 我尝试包含标头并收到错误 预编译标头未包含在 pb h 中 我
  • 如何使用 Qtimer 添加 1 秒延迟

    我目前有一个方法如下 void SomeMethod int a Delay for one sec timer gt start 1000 After one sec SomeOtherFunction a 这个方法实际上是一个附加到信号
  • 如何在 Qt 中以编程方式制作一条水平线

    我想弄清楚如何在 Qt 中制作一条水平线 这很容易在设计器中创建 但我想以编程方式创建一个 我已经做了一些谷歌搜索并查看了 ui 文件中的 xml 但无法弄清楚任何内容 ui 文件中的 xml 如下所示
  • 如何将图像显示为缩略图

    我有一个QTreeView显示硬盘驱动器和目录 我也有一个QListView显示图像文件如下 但我想将图像显示为缩略图 如下所示 My code mainWidget mainWidget QWidget parent QWidget pa
  • 为 Windows 98 编译 Qt

    我需要支持 Windows 98 Qt 文档声称这是可能的 但没有说明 Qt 4 6 的分布式二进制文件不能在 Win98 上运行 而且我采样的大多数 Qt 应用程序也不能在 Win98 上运行 对于几个确实在 98 上运行的应用程序 我询
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959
  • Qt:测量事件处理时间

    我想测量我的应用程序中的哪些事件在主线程中需要很长时间才能执行 阻塞 GUI 或者至少是否有任何事件花费的时间超过 比如说 10 毫秒 显然 我对需要很长时间的任务使用线程和并发 但有时很难在其他线程中放入的内容和可以保留在 GUI 中的内
  • Qt:如何连接到 SQLite?

    我安装了 SQLite3 解压到 c sqlite 创建了一个数据库 c sqlite mzsales 现在我试图在 QTableView 中显示其内容 QSqlDatabase db QSqlDatabase addDatabase QS
  • 将 gnuplot 嵌入现有 QtWidget 中

    我正在用 C 创建一个 伪 实时绘图应用程序 使用 gnuplot 作为绘图后端 我的要求之一是绘图必须位于现有窗口内 而不是有一个单独的绘图窗口 gnuplot 默认为 Gnuplot 有一个选项可以指定 Qt 小部件 ID 这似乎适合我
  • 从 Qt4 中的文本文件中逐字读取

    我想在 Qt4 中逐字读取一个文本文件 说实话我对它很陌生 我想在另一个文件中每行一个字写入 我可以在 C 中做到这一点 没有任何问题 但是当我尝试在 Qt4 中使用 ifstream 和 ofstream 时 我遇到了错误 这是我的 Qt
  • QSerialPort 中的 readAll() 不包括最后发送的响应

    我正在使用 Qt 来控制串行设备 如果我向串行设备发送命令 我会执行类似的操作serial gt write command r n 我制作了一个按钮 它将纯文本小部件内的文本更改为串行端口的响应 为了获得串口的响应 我使用serial g
  • Qt 5.3 无法使 QCompass (QSensor) 在 Windows 8.1 上工作

    我无法让传感器在我的 Asus Transformer T100 上工作 磁力计和指南针无法启动 并且我从加速度计获得假值 始终 x 0 y 9 8 z 0 即使使用我的笔记本电脑 我总是得到相同的结果 第一段文字编辑 Initialisa
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码

随机推荐

  • 数据诊断模型,该怎么搭建?

    你会用数据下判断吗 你怎么确定你的判断是准确的 现在业务说你判断错了 你怎么应对 用数据下判断 是看似简单 实则极大影响数据分析结果的一个问题 同样是本月销售业绩1000万 如果判断是 业绩很好 那么下一步的分析就是总结成功经验 如果判断是
  • 悟空crm php 部署,悟空crm开源版本环境搭建

    安装步骤 JDK需要预先安装 下载后执行install sh 链接 link 硬件配置 因为只有一台机器所以安装在一台机器上了 cpu 内存 硬盘 系统 8核 32G ssd100G centos7 基础软件 mysql安装 1 卸载mar
  • DataGrip数据库连接失败:DBMS: MySQL (无版本)区分大小写: 普通形式=mixed, 分隔形式=exactConnection refused: connect.

    查看任务管理器 服务 mysql服务是否正在运行 右键可控制关闭运行
  • 如何查看视图的sql语句

    select text from syscomments s1 join sysobjects s2 on s1 id s2 id where name 视图名称 前提条件是视图没有被加密 有权限 转载于 https www cnblogs
  • Flink on Zeppelin-1

    准备工作 下载Zeppelin 0 9 0 preview1 或者下载 除了下载Flink的标准release 如果你要使用Flink on Yarn模式或者连接Hive 那么你还需要下载其他Flink组件 flink hadoop com
  • AutoGPT太火了,无需人类插手自主完成任务,ChatGPT 已经过时了?

    转载自 机器之心Pro 原文链接 AutoGPT太火了 无需人类插手自主完成任务 GitHub2 7万星 OpenAI 的 Andrej Karpathy 都大力宣传 认为 AutoGPT 是 prompt 工程的下一个前沿 近日 AI 界
  • Vue3 解决电脑分辨率及缩放导致页面变形的问题

    Vue3 解决电脑分辨率不同导致的页面变形问题 前言 电脑缩放问题解决 屏幕分辨率问题解决 前言 最近在做一个项目 突然发现由于调整电脑的分辨率导致页面变形的问题 正常电脑显示的是100 当调整电脑缩放至125 时 页面发生变形 由于css
  • springboot相关图形

    一 springboot的需求调研 需求分析 即应用场景 开发中如果使用spring springmvc spring集成第三方框架 如springmvc mybatis等 都需要编写大量的xml配置文件 二 框架的设计思想 不需要配置文件
  • Apache Kafka Deep 解析

    1 首先了解主题 经纪人 生产者和消费者等主要术语 下图说明了主要术语 表格详细描述了图表组件 在上图中 主题配置为三个分区 分区1具有两个偏移因子0和1 分区2具有四个偏移因子0 1 2和3 分区3具有一个偏移因子0 副本的id与承载它的
  • c++输出爱心小程序

    输入数值可以得到不同大小的爱心形状 include
  • STM32——FATFS文件基础知识

    一 探索者STM32开发板 通过底面的SD卡接口与SD卡连接 硬件连接原理图 PC8 9 11分时 二 SD卡驱动代码 1 SD Init初始化函数 2 SD ReadDisk读函数 3 SD WriteDisk写函数 1 文件系统是什么
  • @RequestHeader注解详解

    SpringMVC提供了 RequestHeader注解 可以将请求头中变量值映射到控制器的参数中 如下例子 将请求头中的变量值token映射到控制器参数token中 GetMapping checkUserLoginInfo public
  • Linux骚操作第十七话之PAM验证、sudo和开关机控制等

    文章目录 前言 一 PAM安全认证流程 二 提权 三 开关机安全控制 四 系统弱口令检测 五 网络端口扫描 总结 前言 在工作环境中 一些用户的权限都是由root系统管理员通过sudo放权给予 这样做的好处是防止某些用户存在故意之心 破坏系
  • Git:利用Git进行多人协作的场景模拟

    文章目录 场景一 场景二 解决一些后续问题 场景一 Git是一个多人协作下完成的操作 因此Git是需要进行一些多人协作的场景的 那么这里就使用Linux和Windows两个平台进行模拟实现两个用户进行的协作 首先把仓库克隆到本地 再加入两个
  • LVGL学习笔记 21 - 图像Image

    目录 1 图像来源 1 1 图片源文件 1 2 颜色格式 1 2 1 LV IMG CF ALPHA 1 2 4 8BIT 1 2 2 LV IMG CF INDEXED 1 2 4 8BIT 1 2 3 LV IMG CF RAW ALP
  • Wireshark基础使用,SSL解密及http抓包入门教程

    Wireshark VS Fiddler Charles 一 下载与安装 二 抓取https等解密 三 报文传输各层简要介绍 Wireshark VS Fiddler Charles Wireshark功能很多 作用效果很底层 并且可以监听
  • 原码, 反码, 补码 详解

    本篇文章讲解了计算机的原码 反码和补码 并且进行了深入探求了为何要使用反码和补码 以及更进一步的论证了为何可以用反码 补码的加法计算原码的减法 论证部分如有不对的地方请各位牛人帮忙指正 希望本文对大家学习计算机基础有所帮助 一 机器数和真值
  • 人工智能数学基础--导数2:高阶导数及莱布尼茨(Leibniz)公式

    一 定义 一般地 函数y f x 的导数y f x 仍然是x的函数 我们把y f x 的导数叫做函数y f x 的二阶导数 记作y 或 即 相应地 把y f x 的导数f x 叫做函数y f x 的一阶导数 类似地 二阶导数的导数叫做三阶导
  • 新一代CTO修炼之路all-in-AI系列-大数据+AI人工智能驱动技术变革之大数据部门组织架构及团队建设

    文章目录 1 2 1大数据部门组织架构 1 大数据平台组 2 算法组 3 数据分析组 4 更细化的大数据部门划分 总结 随着大数据和人工智能技术的火热发展 传统的老一代CTO 除了有过硬的工程能力外 尚需充电学习大数据和AI人工智能技术 大
  • Qt6教程之三(2) QT使用qss

    QSS是Qt Style Sheets的缩写 中文含义是Qt样式表 它用来自定义控件外观的机制 QSS与网页中使用的CSS非常相似 可以把QSS看作是CSS在Qt领域领域的定制版本 QSS的语法规则 选择器 规则定义1 规则2 规则n 如下