【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.pswp.cn/diannao/82918.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82918.shtml
英文地址,請注明出處:http://en.pswp.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. 項目概述 項目目標 構建一個本地智能輿論分析系統。 利用自然語言處理和多工具協作,實現用戶查詢意圖的自動理解。 進行新聞檢索、情緒分析、結構化輸出和郵件推送。 系統流程 用戶查詢:用戶輸入查詢請求。 提取關鍵詞:從用戶查詢中…