【Qt】qss语法详解

QSS (Qt Style Sheets) 语法格式详解

QSS 是 Qt 的样式表语言,类似于 CSS,用于自定义 Qt 应用程序的外观。以下是 QSS 的完整语法格式说明:

基本语法结构

selector {property: value;property: value;...
}

1. 选择器 (Selectors)

基本选择器

  • 类型选择器:匹配指定类型的所有控件

    QPushButton { color: red; }
    
  • 类选择器:匹配指定类名的控件

    .QPushButton { background: blue; }
    
  • ID 选择器:匹配指定 objectName 的控件

    QPushButton#okButton { font-weight: bold; }
    
  • 通配选择器:匹配所有控件

    * { font-family: "Arial"; }
    

组合选择器

  • 后代选择器:匹配包含在另一个控件中的控件

    QDialog QPushButton { color: green; }
    
  • 子选择器:匹配直接子控件

    QDialog > QPushButton { padding: 5px; }
    

状态选择器

  • 伪状态:匹配控件的特定状态

    QPushButton:hover { background: yellow; }
    QCheckBox:checked { color: white; }
    QLineEdit:disabled { opacity: 0.5; }
    
  • 状态组合:多个状态同时满足

    QPushButton:hover:checked { background: orange; }
    

2. 属性和值

常用属性

  • 尺寸和边距

    min-width: 100px;
    max-height: 50px;
    margin: 5px;
    padding: 10px;
    
  • 背景

    background: red;
    background-color: #ff0000;
    background-image: url(:/images/bg.png);
    
  • 边框

    border: 1px solid black;
    border-radius: 5px;
    border-top: 2px dashed blue;
    
  • 字体

    font: bold 14px "Arial";
    font-family: "Microsoft YaHei";
    font-size: 12pt;
    color: #333333;
    
  • 其他

    opacity: 0.8;
    spacing: 5px;
    qproperty-alignment: AlignCenter;
    

特殊属性

  • 子控件:样式化复杂控件的部分

    QComboBox::drop-down { image: url(dropdown.png); }
    QSpinBox::up-button { width: 20px; }
    
  • 状态图像

    QPushButton:checked {image: url(checked.png);
    }
    

3. 盒模型

QSS 使用标准的 CSS 盒模型:

+---------------------------+
|          margin           |
|  +---------------------+  |
|  |       border        |  |
|  |  +---------------+  |  |
|  |  |    padding    |  |  |
|  |  |  +--------+   |  |  |
|  |  |  | content|   |  |  |
|  |  |  +--------+   |  |  |
|  |  +---------------+  |  |
|  +---------------------+  |
+---------------------------+

4. 渐变和颜色

/* 线性渐变 */
background: qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 white, stop:1 black);/* 径向渐变 */
background: qradialgradient(cx:0.5, cy:0.5, radius: 0.5,fx:0.5, fy:0.5, stop:0 white, stop:1 black);/* 颜色 */
color: rgba(255, 0, 0, 128);  /* 带透明度 */

5. 常用伪状态

伪状态描述
:hover鼠标悬停
:pressed鼠标按下
:checked选中状态
:disabled禁用状态
:enabled启用状态
:focus获得焦点
:unchecked未选中状态
:indeterminate不确定状态(如三态复选框)
:open打开状态(如QComboBox)
:closed关闭状态
:on开关控件处于"on"状态
:off开关控件处于"off"状态

6. 示例代码

/* 主窗口背景 */
QMainWindow {background: qlineargradient(x1:0, y1:0, x2:1, y2:1,stop:0 #a6a6a6, stop:1 #666666);
}/* 按钮样式 */
QPushButton {background-color: #3498db;color: white;border: 2px solid #2980b9;border-radius: 5px;padding: 5px 10px;
}QPushButton:hover {background-color: #2980b9;
}QPushButton:pressed {background-color: #1f618d;
}/* 禁用按钮 */
QPushButton:disabled {background-color: #bdc3c7;border-color: #95a5a6;
}/* 文本框样式 */
QLineEdit {border: 1px solid #bdc3c7;border-radius: 3px;padding: 3px;background: white;
}QLineEdit:focus {border: 1px solid #3498db;
}/* 复选框样式 */
QCheckBox {spacing: 5px;
}QCheckBox::indicator {width: 15px;height: 15px;
}QCheckBox::indicator:checked {image: url(:/images/checked.png);
}/* 组合框下拉箭头 */
QComboBox::drop-down {subcontrol-origin: padding;subcontrol-position: top right;width: 15px;border-left-width: 1px;border-left-color: darkgray;border-left-style: solid;
}

7. 使用 QSS 的注意事项

  1. 优先级:更具体的选择器会覆盖更一般的样式
  2. 继承:某些属性会从父控件继承
  3. 动态属性:可以使用 [property="value"] 选择器
    QPushButton[highlight="true"] { color: red; }
    
  4. 应用样式表
    // 单个控件
    widget->setStyleSheet("QPushButton { color: red; }");// 整个应用程序
    QApplication::setStyleSheet("...");
    

QSS 提供了强大的样式定制能力,几乎可以修改 Qt 控件的所有视觉方面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/82918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Azure资源创建与部署指南

本文将指导您如何在Azure平台上创建和配置必要的资源,以部署基于OpenAI的应用程序。 资源组创建 资源组是管理和组织Azure资源的逻辑容器。 在Azure门户顶端的查询框中输入"Resource groups"(英文环境)或"资源组"(中文环境)在搜索结果中点击"资…

Java后端快速生成验证码

Hutool是一个小而全的Java工具类库,它提供了很多实用的工具类,包括但不限于日期处理、加密解密、文件操作、反射操作、HTTP客户端等。 核心工具类:CaptchaUtil,CaptchaUtil 是 Hutool 提供的一个工具类,用于创建各种类…

sql 备份表a数据到表b

备份表a数据到表b mysql CREATE TABLE sys_dict_240702 LIKE sys_dict;INSERT INTO sys_dict_240702 SELECT * FROM sys_dict;mssql select * into t_Dict_240702 from t_Dict

2.4GHz无线通信芯片选型指南:集成SOC与低功耗方案解析

今天给大家分享几款2.4GHz无线通信芯片方案: 一、集成SOC芯片方案 XL2407P(芯岭技术) 集成射频收发机和微控制器(如九齐NY8A054E) 支持一对多组网和自动重传 发射功率8dBm,接收灵敏度-96.5dBm&#xff08…

Tomcat与纯 Java Socket 实现远程通信的区别

Servlet 容器​​(如 Tomcat) 是一个管理 Servlet 生命周期的运行环境,主要功能包括: ​​协议解析​​:自动处理 HTTP 请求/响应的底层协议(如报文头解析、状态码生成); ​​线程…

[超级简单]讲解如何用PHP实现LINE Pay API!

在 PHP 中实现 LINE Pay API 之前我应该​​做哪些准备?如何在 PHP 中实现 LINE Pay API? 目录 [前提] 环境使用 PHP 实现 LINE Pay API 的准备工作使用 PHP 实现 LINE Pay API概括 [前提] 环境 这次我们将使用SandBox环境(测试环境&a…

centos7.x下,使用宝塔进行主从复制的原理和实践

操作原理: 一、主库配置 1.修改 MySQL 配置文件 # 编辑主库配置文件(路径根据实际系统可能不同) vim /etc/my.cnf # 添加以下配置 [mysqld] server-id 1 # 唯一 ID,主库设置为 1 log-bin mysql-bin …

从零实现基于Transformer的英译汉任务

1. model.py(用的是上一篇文章的代码:从0搭建Transformer-CSDN博客) import torch import torch.nn as nn import mathclass PositionalEncoding(nn.Module):def __init__ (self, d_model, dropout, max_len5000):super(PositionalEncoding,…

c#建筑行业财务流水账系统软件可上传记账凭证财务管理系统签核功能

# financial_建筑行业 建筑行业财务流水账系统软件可上传记账凭证财务管理系统签核功能 # 开发背景 软件是给岳阳客户定制开发一款建筑行业流水账财务软件。提供工程签证单、施工日志、人员出勤表等信息记录。 # 财务管理系统功能描述 1.可以自行设置记账科目,做凭…

MySQL 8.0 OCP 1Z0-908 题目解析(2)

题目005 Choose two. Which two actions can obtain information about deadlocks? □ A) Run the SHOW ENGINE INNODB MUTEX command from the mysql client. □ B) Enable the innodb_status_output_locks global parameter. □ C) Enable the innodb_print_all_deadlock…

XA协议和Tcc

基于 XA 协议的两阶段提交 (2PC)。这是一种分布式事务协议,旨在保证在多个参与者(通常是不同的数据库或资源管理器)共同参与的事务中,所有参与者要么都提交事务,要么都回滚事务,从而维护数据的一致性。 你…

数据分析-图2-图像对象设置参数与子图

from matplotlib import pyplot as mp mp.figure(A figure,facecolorgray) mp.plot([0,1],[1,2]) mp.figure(B figure,facecolorlightgray) mp.plot([1,2],[2,1]) #如果figure中标题已创建,则不会新建窗口, #而是将旧窗口设置为当前窗口 mp.figure(A fig…

跳转语句:break、continue、goto -《Go语言实战指南》

在控制流程中,我们有时需要跳出当前循环或跳过当前步骤,甚至直接跳转到指定位置。Go 提供了三种基本跳转语句: • break:跳出当前 for、switch 或 select。• continue:跳过本轮循环,进入下一轮。• goto&a…

Linux中find命令用法核心要点提炼

大家好,欢迎来到程序视点!我是你们的老朋友.小二! 以下是针对Linux中find命令用法的核心要点提炼: 基础语法结构 find [路径] [选项] [操作]路径:查找目录(.表当前目录,/表根目录)…

MQTT协议详解:物联网通信的轻量级解决方案

MQTT协议详解:物联网通信的轻量级解决方案 引言 在物联网(IoT)快速发展的今天,设备间高效可靠的通信变得至关重要。MQTT(Message Queuing Telemetry Transport)作为一种轻量级的发布/订阅协议,已成为物联网通信的首选解决方案。本文将深入探…

list基础用法

list基础用法 1.list的访问就不能用下标[]了,用迭代器2.emplace_back()几乎是与push_back()用法一致,但也有差别3.insert(),erase()的用法4.reverse()5.排序6.合并7.unique()(去重)8.splice剪切再粘贴 1.list的访问就不能用下标[]了,用迭代器…

2025年第十六届蓝桥杯大赛软件赛C/C++大学B组题解

第十六届蓝桥杯大赛软件赛C/C大学B组题解 试题A: 移动距离 问题描述 小明初始在二维平面的原点,他想前往坐标(233,666)。在移动过程中,他只能采用以下两种移动方式,并且这两种移动方式可以交替、不限次数地使用: 水平向右移动…

BGP实验练习2

需求: 1.AS1存在两个环回,一个地址为192.168.1.0/24,该地址不能再任何协议中宣告 AS3存在两个环回,该地址不能再任何协议中宣告 AS1还有一个环回地址为10.1.1.0/24,AS3另一个环回地址是11.1.1.0/24 最终要求这两…

【温湿度物联网】记录1:寄存器配置

一,及哦地址 基地址base的定义: ↓ 定义完是这个: GPIOA的地址就是以上的代表 2寄存器: 通过bsrr来改变odr寄存器,左移16位就是把0-15位的给移到高位的保留区,这样就归零了 3,项目寄存器实操…

MCP项目实例 - client sever交互

1. 项目概述 项目目标 构建一个本地智能舆论分析系统。 利用自然语言处理和多工具协作,实现用户查询意图的自动理解。 进行新闻检索、情绪分析、结构化输出和邮件推送。 系统流程 用户查询:用户输入查询请求。 提取关键词:从用户查询中…