【Qt開發】常用控件(七)-> styleSheet

目錄

1 -> 引言:為什么需要 Qt 樣式表?

2 -> Qt 樣式表基礎

2.1 -> 什么是 Qt 樣式表

2.2 -> 基本語法結構

3 -> 選擇器類型

3.1 -> 通用選擇器

3.2 -> 類型選擇器

3.3 -> 類選擇器

3.4 -> ID 選擇器(通過 objectName)

3.5 -> 屬性選擇器

3.6 -> 子控件選擇器

3.7 -> 狀態選擇器

4 -> 常用屬性詳解

4.1 -> 背景與邊框

4.2 -> 文本與字體

4.3 -> 尺寸與邊距

4.4 -> 漸變與圖像

5 -> 復雜控件樣式化

5.1 -> QComboBox 樣式

5.2 -> QSlider 樣式

5.3 -> QTabWidget

6 -> 代碼示例

6.1 -> 設置文本樣式

6.2 -> 實現切換夜間模式


1 -> 引言:為什么需要 Qt 樣式表?

在 GUI 開發中,應用程序的外觀和用戶體驗至關重要。Qt 提供了強大的樣式表系統,允許開發者使用類似 CSS 的語法來美化應用程序界面,無需重寫繪圖代碼或創建自定義控件。無論想實現現代化界面、保持跨平臺一致性,還是創建品牌特定的視覺風格,Qt 樣式表都能輕松實現。

2 -> Qt 樣式表基礎

2.1 -> 什么是 Qt 樣式表

Qt 樣式表(QSS)是一種基于 CSS 語法的機制,用于自定義 Qt 控件的外觀。它允許你設置顏色、字體、邊框、背景等屬性,而無需子類化 Qt 控件。

CSS(Cascading Style Sheets 層疊樣式表)本身屬于網頁前端技術。主要就是用來描述界面的樣式。

所謂 “樣式”,包括不限于大小,位置,顏色,間距,字體,背景,邊框等。

平時所看到的豐富多彩的網頁,就會用到大量的 CSS。

Qt 雖然是做 GUI 開發,但實際上和網頁前端有很多異曲同工支持。因此 Qt 也引入了對于 CSS 的支持。

CSS 中可以設置的樣式屬性非常多。基于這些屬性 Qt 只能支持其中一部分,稱為 QSS(Qt Style Sheet)。

2.2 -> 基本語法結構

選擇器 {屬性: 值;屬性: 值;
}

示例:

QPushButton {background-color: #3498db;color: white;border: 2px solid #2980b9;border-radius: 5px;padding: 5px 10px;
}

3 -> 選擇器類型

3.1 -> 通用選擇器

* {font-family: "Microsoft YaHei";font-size: 12px;
}

3.2 -> 類型選擇器

QPushButton {/* 所有QPushButton的樣式 */
}

3.3 -> 類選擇器

.QPushButton {/* 與類型選擇器類似 */
}

3.4 -> ID 選擇器(通過 objectName)

QPushButton#loginButton {background-color: green;
}

3.5 -> 屬性選擇器

QPushButton[flat="true"] {border: none;
}

3.6 -> 子控件選擇器

QComboBox::drop-down {/* QComboBox下拉箭頭的樣式 */
}

3.7 -> 狀態選擇器

QPushButton:hover {background-color: #2980b9;
}QPushButton:pressed {background-color: #21618c;
}QPushButton:disabled {color: gray;background-color: #dddddd;
}

4 -> 常用屬性詳解

4.1 -> 背景與邊框

QWidget {background-color: #f0f0f0; /* 背景顏色 */border: 1px solid #cccccc; /* 邊框:寬度 樣式 顏色 */border-radius: 4px;       /* 圓角半徑 */
}

4.2 -> 文本與字體

QLabel {color: #333333;           /* 文本顏色 */font-family: "Arial";     /* 字體家族 */font-size: 14px;          /* 字體大小 */font-weight: bold;        /* 字體粗細 */
}

4.3 -> 尺寸與邊距

QPushButton {min-width: 80px;          /* 最小寬度 */max-width: 200px;         /* 最大寬度 */height: 30px;             /* 固定高度 */padding: 5px 10px;        /* 內邊距 */margin: 2px;              /* 外邊距 */
}

4.4 -> 漸變與圖像

QPushButton {/* 線性漸變 */background: qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #3498db, stop:1 #2980b9);/* 徑向漸變 */background: qradialgradient(cx:0.5, cy:0.5, radius: 0.5,fx:0.5, fy:0.5,stop:0 white, stop:1 green);/* 使用圖像 */border-image: url(:/images/button.png) 3 3 3 3 stretch stretch;
}

5 -> 復雜控件樣式化

5.1 -> QComboBox 樣式

QComboBox {border: 1px solid #cccccc;border-radius: 3px;padding: 1px 18px 1px 3px;min-width: 6em;
}QComboBox::drop-down {subcontrol-origin: padding;subcontrol-position: top right;width: 15px;border-left-width: 1px;border-left-color: darkgray;border-left-style: solid;border-top-right-radius: 3px;border-bottom-right-radius: 3px;
}QComboBox::down-arrow {image: url(:/images/down_arrow.png);width: 10px;height: 10px;
}

5.2 -> QSlider 樣式

QSlider::groove:horizontal {border: 1px solid #999999;height: 8px;background: #f0f0f0;border-radius: 4px;
}QSlider::handle:horizontal {background: #3498db;border: 1px solid #2980b9;width: 18px;margin: -5px 0;border-radius: 9px;
}QSlider::sub-page:horizontal {background: #3498db;border-radius: 4px;
}

5.3 -> QTabWidget

QTabWidget::pane {border: 1px solid #cccccc;background: white;
}QTabWidget::tab-bar {alignment: center;
}QTabBar::tab {background: #f0f0f0;border: 1px solid #cccccc;border-bottom: none;padding: 5px 15px;border-top-left-radius: 4px;border-top-right-radius: 4px;
}QTabBar::tab:selected {background: white;margin-bottom: -1px;
}

6 -> 代碼示例

6.1 -> 設置文本樣式

1. 在界面上創建 label

2. 編輯右側的 styleSheet 屬性,設置樣式

此處的語法格式同 CSS,使用鍵值對的方式設置樣式。其中鍵和值之間使用 :分割。鍵值對之間使用 ;分割。

另外,Qt Designer 只能對樣式的基本格式進行校驗,不能檢測出哪些樣式不被 Qt 支持。比如 text-align: center 這樣的文本居中操作,就無法支持。

編輯完成樣式之后,可以看到在 Qt Designer 中能夠實時預覽出效果。

3. 運行程序,可以看到實際效果和預覽效果基本一致。

6.2 -> 實現切換夜間模式

1. 在界面上創建一個多行輸入框(Text Edit)和兩個按鈕

objectName 分別是?pushButton_light 和?pushButton_dark

2. 編寫按鈕的 slot 函數

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_light_clicked()
{// 設置窗口樣式this->setStyleSheet("background-color: RGB(240, 240, 240);");// 設置輸入框樣式ui->plainTextEdit->setStyleSheet("background-color: white; color: black;");// 設置按鈕樣式ui->pushButton_light->setStyleSheet("color: black;");ui->pushButton_dark->setStyleSheet("color: black;");
}void Widget::on_pushButton_dark_clicked()
{// 設置窗口樣式this->setStyleSheet("background-color: black;");// 設置輸入框樣式ui->plainTextEdit->setStyleSheet("background-color: black; color: white;");// 設置按鈕樣式ui->pushButton_light->setStyleSheet("color: white;");ui->pushButton_dark->setStyleSheet("color: white;");
}

關于計算機中的顏色表示

計算機中使用 “像素” 表示屏幕上的一個基本單位(也就是一個發亮的光點)。

每個光點都使用三個字節表示顏色,分別是 R(red),G(green),B(blue)一個字節表示(取值范圍是 0-255,或者 0x00-0xFF)。

混合三種不同顏色的數值比例,就能搭配出千千萬萬的顏色出來。

  • rgb(255, 0, 0) 或者 #FF0000 或者 #F00 表示純紅色。
  • rgb(0,?255, 0) 或者 #00FF00 或者 #0F0 表示純綠色。
  • rgb(0, 0, 255) 或者 #0000FF?或者 #00F?表示純藍色。
  • rgb(255, 255, 255) 或者 #FFFFFF?或者 #FFF?表示純白色。
  • rgb(0, 0, 0) 或者 #000000 或者 #000 表示純黑色。

當然,上述規則只針對一般的程序而言是這么設定的。實際的顯示器,可能是 8bit 色深或者 10bit 色深等,實際情況會更加復雜。

3. 運行程序,點擊 “日間模式”,就是淺色背景,深色文字;點擊 “夜間模式”,就是深色背景,淺色文字


感謝各位大佬支持!!!

互三啦!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94742.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94742.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94742.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux 正則表達式學習

本篇主要學習幾個正則表達式匹配符&#xff1a; ^&#xff1a;錨定行首$&#xff1a;錨定行尾\< 或者 \b&#xff1a;錨定詞首\>或者 \b&#xff1a;錨定詞尾\B&#xff1a;匹配”非單詞邊界” 下面通過實驗徹底掌握&#xff1a; 測試文件內容如下&#xff1a; cat test.…

MIPS匯編快速入門 【龍芯】

一、前言&#xff1a;MIPS與龍芯的淵源 MIPS&#xff08;Microprocessor without Interlocked Pipelined Stages&#xff09;是一種經典的RISC&#xff08;精簡指令集&#xff09;架構&#xff0c;以流水線高效、指令簡潔、低功耗為特點。龍芯&#xff08;Loongson&#xff09;…

如何對springboot mapper 編寫單元測試

如何對springboot mapper 編寫單元測試在 Spring Boot 中對 MyBatis Mapper 編寫單元測試的核心目標是??隔離真實數據庫依賴??&#xff0c;驗證 SQL 邏輯與數據庫交互的正確性。以下是完整的實踐指南&#xff0c;涵蓋環境配置、測試數據初始化、具體測試用例編寫及常見問題…

學習游戲制作記錄(數據加密以及主菜單和畫面優化)8.27

1.實現數據加密FileDataHandler 腳本&#xff1a;private bool encryptData false;//是否加密public string codeWord "alexdev";//加密碼public FileDataHandler(string _dataDirPath, string _fileName, bool _encryptData){dataDirPath _dataDirPath;FileName …

五自由度磁懸浮軸承同頻振動抑制:從機理拆解到傳遞函數驗證的核心方案

摘要 五自由度磁懸浮軸承憑借無摩擦、高轉速的優勢,在航空航天、透平機械等領域應用廣泛,但轉子不平衡質量引發的同頻振動(頻率與轉子轉速一致)始終是制約其精度的核心痛點。本文從轉子不平衡振動的物理機理出發,詳細推導不平衡力的數學模型,分析位移輸出中擾動信號的疊…

CSS 優先級:公司組織架構模型

為什么我的CSS樣式不生效&#xff1f; 在網頁開發中&#xff0c;你可能經常會遇到一個令人困惑的問題&#xff1a;你明明寫了CSS代碼&#xff0c;但是樣式卻不生效&#xff0c;或者出現了意想不到的沖突。你可能會反復檢查代碼&#xff0c;卻找不到任何語法錯誤。這背后隱藏的原…

Go語言循環語句全解析

循環語句概述循環語句在編程中的作用循環語句是編程中控制程序流程的重要結構&#xff0c;它允許我們重復執行特定代碼塊&#xff0c;直到滿足終止條件。在數據處理、算法實現、系統監控等場景中&#xff0c;循環都發揮著關鍵作用。典型應用場景&#xff1a;數據處理&#xff1…

基于NXP iMXRT600音頻算法開發方法

iMXRT600 是一款高性能的微控制器&#xff0c;在開發音頻算法時可按以下步驟和方法進行&#xff1a;1. 開發環境搭建硬件平臺準備好 iMXRT600 開發板&#xff0c;確保開發板上具備音頻輸入輸出接口&#xff0c;如 I2S&#xff08;Inter - IC Sound&#xff09;接口用于音頻數據…

怎么理解API?

想象一下你去一家餐廳吃飯。你&#xff08;用戶&#xff09;不會直接走進廚房告訴廚師怎么做菜&#xff0c;對吧&#xff1f;你會怎么做&#xff1f;你會拿起菜單&#xff0c;查看上面列出的菜品&#xff08;例如“意大利面”&#xff09;、它們的描述和價格。然后&#xff0c;…

系統架構設計師備考第7天——網絡協議中間件軟件構件

一、網絡協議 核心概念 定義&#xff1a;網絡協議是計算機通信的“語言規則”&#xff0c;規定了數據格式、傳輸時序、控制信號等&#xff0c;確保不同系統實體間正常通信。作用&#xff1a;實現資源共享與信息交換的基礎。常見類型&#xff1a; 局域網協議&#xff08;LAN&…

《數據之心》

《數據之心》一、故障2045年&#xff0c;中國“天算”量子云中樞第七區。魚小妖站在控制臺前&#xff0c;指尖劃過全息屏&#xff0c;藍光映在她清秀的臉龐上。她的長發如墨&#xff0c;眸子卻似星河&#xff0c;倒映著無數跳動的數據流。她是第七區最年輕的系統神經工程師&…

《C++ Primer 第五版》不要返回局部對象的引用或指針

1. 先看一個“看似合理”的例子#include <iostream> using namespace std;int& foo() {int x 10; // 局部變量&#xff0c;存在于棧中return x; // 返回它的引用 }int main() {int& ref foo(); // ref 綁定到了已經被銷毀的 xcout << ref &…

2024鴻蒙樣題需要掌握的知識點

一、讀取json格式文件為對象或數組&#xff0c;顯示相應字段1、創建json文件的參數一致的類2、導入類、導入json文件3、循環渲染import router from ohos.router //導入即對象 import books from resources/rawfile/book1.json import { Book } from ../model/BookEntry Compon…

QML Charts組件之坐標軸示例

目錄引言&#x1f3af; 運行效果預覽&#x1f4da; 相關系列文章五種坐標軸詳解與代碼實踐1. 數值坐標軸&#xff08;ValueAxis&#xff09;示例代碼說明2. 對數坐標軸&#xff08;LogValueAxis&#xff09;示例代碼說明3. 日期坐標軸&#xff08;DateTimeAxis&#xff09;示例…

Vue3+ElementPlus倒計時示例

按鈕文字默認顯示“開始倒計時”當點擊按鈕時&#xff0c;顯示正在倒計時(倒計時數字)倒計時結束按鈕顯示“開始倒計時” 倒計時邏輯 Hooks 函數 hooks/useCountDown.js /*** hooks函數&#xff1a;函數是用于封裝和復用組件邏輯的一種機制* 定義&#xff1a;Hooks 是一種在不使…

docker 的網絡

1.查看docker里面的網絡docker network ls 2.查看某個 Docker 網絡的 網關 IP 和 子網段docker network inspect <網絡名或ID>

數據挖掘,到底是在挖掘什么?

&#x1f468;?&#x1f393;博主簡介 &#x1f3c5;CSDN博客專家 ??&#x1f3c5;云計算領域優質創作者 ??&#x1f3c5;華為云開發者社區專家博主 ??&#x1f3c5;阿里云開發者社區專家博主 &#x1f48a;交流社區&#xff1a;運維交流社區 歡迎大家的加入&#xff01…

【車載開發系列】CS+ for CC開發環境IDE

【車載開發系列】CS for CC開發環境IDE 【車載開發系列】CS for CC開發環境IDE【車載開發系列】CS for CC開發環境IDE一. 引言二. IDE安裝三. 新建工程四. 堆與棧內存的設置1&#xff09;棧內存設置2&#xff09;堆內存設置一. 引言 瑞薩單片機開發環境有三種&#xff1a;estu…

如何將視頻從安卓設備傳輸到Mac?

你是否想要創建備份、釋放存儲空間&#xff0c;或者分享難忘時刻&#xff1f;你可能想要輕松地將視頻從安卓設備復制到MacBook。在本篇關于“如何將視頻從安卓傳輸到Mac”的指南中&#xff0c;我們將介紹五種智能方法&#xff0c;幫助你無縫地復制視頻。從傳統的WiFi連接方法到…

MyBatis 初識:框架定位與核心原理——SQL 自由掌控的藝術

&#x1f50d; MyBatis 初識&#xff1a;框架定位與核心原理——SQL 自由掌控的藝術 文章目錄&#x1f50d; MyBatis 初識&#xff1a;框架定位與核心原理——SQL 自由掌控的藝術&#x1f9e9; 一、為什么需要 ORM 框架&#xff1f;&#x1f4a1; JDBC 的痛點&#xff1a;原始時…