【Qt開發流程】之UI風格、預覽及QPalette使用

概述

一個優秀的應用程序不僅要有實用的功能,還要有一個漂亮美膩的外觀,這樣才能使應用程序更加友善、操作性良好,更加符合人體工程學。作為一個跨平臺的UI開發框架,Qt提供了強大而且靈活的界面外觀設計機制,能夠幫助開發人員構建現代化、直觀性強、功能強大的用戶界面。

Qt UI設計的特點包括:

  1. 統一的外觀:Qt提供了統一的圖標、字體和顏色風格,使得應用程序在不同平臺上具有相同的外觀。
  2. 靈活的布局:Qt支持各種布局方式,包括基于網格的布局、垂直和水平框架、堆疊布局等,使得應用程序具有靈活性和可擴展性。
  3. 多樣化的控件:Qt提供了各種控件,包括按鈕、文本框、滑塊、菜單、對話框等,開發人員可以根據需求選擇最適合的控件。
  4. 群組化控件:Qt提供了群組化控件,如復選框和單選框等,方便用戶進行選擇操作。
  5. 功能強大的繪圖:Qt提供了強大的繪圖能力,使得開發人員可以輕松地創建各種圖形界面元素。

QStyle類和QStyleFactory類

QStyle類是一個抽象基類,封裝了GUI的外觀。Qt中的各種風格都繼承自QStyle類。
Qt包含了一組QStyle子類來模擬Qt支持的不同平臺的風格(QWindowsStyle, QMacStyle等)。默認情況下,這些樣式內置于Qt GUI模塊中。樣式也可以作為插件提供。
Qt的內置小部件使用QStyle來執行幾乎所有的繪圖,確保它們看起來完全像等效的本地小部件。
如下圖顯示了9種不同樣式的QComboBox:
在這里插入圖片描述
QStyleFactory類可以創建QStyle對象。
QStyleFactory使用create()函數和標識樣式的鍵創建一個QStyle對象。這些樣式要么是內置的,要么是從樣式插件動態加載的。
可以使用keys()函數獲取可用的風格。它們通常包括"windows" 和 “fusion”。而有些風格,如“windowsxp”、“windowsvista”及“macintosh”只有在特定平臺上才有效。注意鍵是不區分大小寫的。

使用QtCreator預覽樣式

在使用Qt Creator設計師設計界面時,可以使用Qt提供的風格預覽功能進行預覽。
在這里插入圖片描述
預覽效果如下:
Windows風格
在這里插入圖片描述
Vista風格
在這里插入圖片描述
也可以在運行程序時,調用QApplicationsetStyle()函數來指定要使用的風格:

QApplication a(argc, argv);a.setStyle(QStyleFactory::create("fusion"));

顯示如下:
在這里插入圖片描述
或者使用命令行調用:

 ./myapplication -style windows

如果沒有指定樣式,Qt將根據用戶的平臺或桌面環境選擇最合適的樣式。
還可以使用QWidget::setStyle()函數在單個小部件上設置樣式。
出去Qt提供的這些風格外,如果想實現自定義風格,一般做法是子類發Qt的風格類。如子類化QProxyStyle類。

  class NorwegianWoodStyle : public QProxyStyle{Q_OBJECTpublic:NorwegianWoodStyle();void polish(QPalette &palette) override;void polish(QWidget *widget) override;void unpolish(QWidget *widget) override;int pixelMetric(PixelMetric metric, const QStyleOption *option,const QWidget *widget) const override;int styleHint(StyleHint hint, const QStyleOption *option,const QWidget *widget, QStyleHintReturn *returnData) const override;void drawPrimitive(PrimitiveElement element, const QStyleOption *option,QPainter *painter, const QWidget *widget) const override;void drawControl(ControlElement control, const QStyleOption *option,QPainter *painter, const QWidget *widget) const override;private:static void setTexture(QPalette &palette, QPalette::ColorRole role,const QPixmap &pixmap);static QPainterPath roundRectPath(const QRect &rect);};

QPalette使用

QPalette類包含每個小部件狀態的顏色組。
調色板由三個顏色組組成:Active、Disabled和Inactive。Qt中的所有小部件都包含一個調色板,并使用它們的調色板來繪制自己。這使得用戶界面易于配置,并且更容易保持一致性。
如果想要創建一個新的小部件,Qt強烈建議使用調色板中的顏色,而不是硬編碼特定的顏色。
顏色組:

  • The Active group 用于具有鍵盤焦點的窗口。
  • The Inactive group用于其他窗口。
  • The Disabled組用于由于某種原因禁用的小部件(而不是窗口)。
    活動和非活動窗口都可以包含禁用的小部件。(禁用的小部件通常被稱為不可訪問或顯示為灰色。)
    在大多數樣式中,Active和Inactive看起來是一樣的。
    可以使用setColor()和setBrush()為調色板的任何顏色組中的特定角色設置顏色和畫筆。顏色組包含一組小部件用于繪制自身的顏色。
    要修改顏色組,可以調用setColor()和setBrush()函數,這取決于想要純顏色還是像素圖圖案。
    也有相應的color()和brush(),以及一個常用的方便函數來獲取當前ColorGroup的ColorRole: window(), windowText(), base()等。
    可以使用復制構造函數復制一個調色板,并使用isCopyOf()測試兩個調色板是否相同。
    QPalette通過使用隱式共享進行了優化,因此將QPalette對象作為參數傳遞是非常有效的。
    警告:有些樣式不會對所有繪圖使用調色板,例如,如果它們使用本機主題引擎。這對于Windows XP、Windows Vista和macOS樣式都是如此。
	QPalette palette;// 設置背景色和前景色palette.setColor(QPalette::Button, QColor(Qt::red));palette.setColor(QPalette::ButtonText, QColor(Qt::red));

QPalette類主要的顏色角色介紹:

枚舉描述
QPalette::Window10一般的背景色。
QPalette::BackgroundWindow這個值已經過時了。使用Window代替。
QPalette::WindowText0一般的前景色。
QPalette::ForegroundWindowText這個值已經過時了。使用WindowText代替。
QPalette::Base9主要用作文本輸入小部件的背景色,但也可以用于其他繪畫-例如組合框下拉列表和工具欄手柄的背景。它通常是白色或其他淺色的。
QPalette::AlternateBase16在行顏色交替的視圖中用作備用背景色(參見QAbstractItemView::setAlternatingRowColors())。
QPalette::ToolTipBase18用作QToolTip和QWhatsThis的背景色。工具提示使用QPalette的Inactive顏色組,因為工具提示不是活動窗口。
QPalette::ToolTipText19用作QToolTip和QWhatsThis的前景色。工具提示使用QPalette的Inactive顏色組,因為工具提示不是活動窗口。
QPalette::Text6與基礎一起使用的前景色。這通常與WindowText相同,在這種情況下,它必須提供與Window和Base的良好對比。
QPalette::Button1一般按鈕的背景顏色。這個背景可以不同于Window,因為有些樣式需要不同的按鈕背景顏色。
QPalette::ButtonText8與按鈕顏色一起使用的前景色。
QPalette::BrightText7一種與WindowText非常不同的文本顏色,并與深色形成鮮明對比。通常用于需要繪制text或WindowText對比度較差的文本,例如按下的按鈕。請注意,文本顏色可以用于文字以外的東西;文本顏色通常用于文本,但對線條、圖標等使用文本顏色角色也很常見。

結論

如果一個人秒回了你,說明這個人在玩手機

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

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

相關文章

利用Rclone將阿里云對象存儲遷移至雨云對象存儲的教程,對象存儲數據遷移教程

使用Rclone將阿里云對象存儲(OSS)的文件全部遷移至雨云對象存儲(ROS)的教程,其他的對象存儲也可以參照本教程。 Rclone簡介 Rclone 是一個用于和同步云平臺同步文件和目錄命令行工具。采用 Go 語言開發。 它允許在文件系統和云存儲服務之間或在多個云存儲服務之間…

STM32-EXTI外部中斷

目錄 一、中斷系統 二、STM32中斷 三、NVIC(嵌套中斷向量控制器)基本結構 四、NVIC優先級分組 五、EXTI外部中斷 5.1 外部中斷基本知識 5.2 外部中斷(EXTI)基本結構 ?編輯 5.2.1開發步驟: 5.3 AFIO復用IO口…

ADAudit Plus:強大的網絡安全衛士

隨著數字化時代的不斷發展,企業面臨著越來越復雜和多樣化的網絡安全威脅。在這個信息爆炸的時代,保護組織的敏感信息和確保網絡安全已經成為企業發展不可或缺的一環。為了更好地管理和監控網絡安全,ADAudit Plus應運而生,成為網絡…

ThreadLocal系列-ThreadLocalMap源碼

1.ThreadLocalMap.Entry key&#xff1a;指向key的是弱引用 value&#xff1a;強引用 public class ThreadLocal<T> {static class ThreadLocalMap {/*** The entries in this hash map extend WeakReference, using* its main ref field as the key (which is always…

32、卷積參數 - 長寬方向的公式推導

有了前面三節的卷積基礎 padding, stride, dilation 之后,大概就可以了解一個卷積算法的全貌了。 一個完整的卷積包含的輸入和輸出有: 輸入圖像,表示為[n, hi, wi, ci] 卷積核,表示為[co, kh, kw, ci] 輸出特征圖,表示為[n, ho, wo, co] 以上為卷積算法的兩個輸入 tensor…

【持更】python數據處理-學習筆記

1、讀取excel /csv及指定sheet&#xff1a; pd.read_excel("路徑",sheetname"xx") 修改列名df.rename 修改字符串類型到數字 pandas.to_numeric&#xff08;&#xff09; 2、刪除drop、去重drop_duplicates &#xff08;1&#xff09;空值所在行/列 行&am…

Redis分布式鎖有什么缺陷?

Redis分布式鎖有什么缺陷&#xff1f; Redis 分布式鎖不能解決超時的問題&#xff0c;分布式鎖有一個超時時間&#xff0c;程序的執行如果超出了鎖的超時時間就會出現問題。 1.Redis容易產生的幾個問題&#xff1a; 2.鎖未被釋放 3.B鎖被A鎖釋放了 4.數據庫事務超時 5.鎖過期了…

centos 7 卸載圖形化界面步驟記錄

centos7 服務器操作系統&#xff0c;挺小一配置&#xff0c;裝了圖形化界面&#xff0c;現在運行程序的時候跑不動了&#xff0c;我想這圖形界面也沒啥用&#xff0c;卸載了算了&#xff01; 卸載步驟 yum grouplist 查詢已經安裝的組件 可以看到 圖形化界面 等是以分組存在的…

深入理解Spring IOC的工作流程

理解Spring IOC&#xff08;Inversion of Control&#xff09;的工作流程是理解Spring框架的核心之一。下面是Spring IOC的基本工作流程&#xff1a; 配置&#xff1a; 開發者通過XML配置文件、Java配置類或者注解等方式&#xff0c;定義應用中的Bean以及它們之間的依賴關系。這…

TCP數據粘包的處理

TCP數據粘包的處理 背鍋俠TCP解決方案2.1 發送端2.2 接收端 背鍋俠TCP 在前面介紹套接字通信的時候說到了TCP是傳輸層協議&#xff0c;它是一個面向連接的、安全的、流式傳輸協議。因為數據的傳輸是基于流的所以發送端和接收端每次處理的數據的量&#xff0c;處理數據的頻率可…

Qt練習題

1.使用手動連接&#xff0c;將登錄框中的取消按鈕使用qt4版本的連接到自定義的槽函數中&#xff0c;在自定義的槽函數中調用關閉函數 將登錄按鈕使用qt5版本的連接到自定義的槽函數中&#xff0c;在槽函數中判斷ui界面上輸入的賬號是否為"admin"&#xff0c;密碼是否…

代碼隨想錄 96. 不同的二叉搜索樹

題目 給你一個整數 n &#xff0c;求恰由 n 個節點組成且節點值從 1 到 n 互不相同的 二叉搜索樹 有多少種&#xff1f;返回滿足題意的二叉搜索樹的種數。 示例 1&#xff1a; 輸入&#xff1a;n 3 輸出&#xff1a;5 示例 2&#xff1a; 輸入&#xff1a;n 1 輸出&#xff1…

【Angular開發】Angular 16發布:發現前7大功能

Angular 于2023年5月3日發布了主要版本升級版Angular 16。作為一名Angular開發人員&#xff0c;我發現這次升級很有趣&#xff0c;因為與以前的版本相比有一些顯著的改進。 因此&#xff0c;在本文中&#xff0c;我將討論Angular 16的前7個特性&#xff0c;以便您更好地理解。…

機器學習基礎介紹

百度百科&#xff1a; 機器學習是一門多領域交叉學科&#xff0c;涉及概率論、統計學、逼近論、凸分析、算法復雜度理論等多門學科。專門研究計算機怎樣模擬或實現人類的學習行為&#xff0c;以獲取新的知識或技能&#xff0c;重新組織已有的知識結構使之不斷改善自身的性能。 …

手工酸奶店如何選址?開在哪里比較合適?

手工酸奶店是一個非常受歡迎的創業項目&#xff0c;但想要成功開店&#xff0c;選址是非常重要的。 本人開酸奶店5年時間&#xff0c;下面我將為大家分享一些選址的小技巧&#xff0c;希望對大家有所幫助。&#xff08;可以點贊收藏&#xff0c;方便以后隨時查閱&#xff09; …

入職字節外包一個月,我離職了。。。

有一種打工人的羨慕&#xff0c;叫做“大廠”。 真是年少不知大廠香&#xff0c;錯把青春插稻秧。 但是&#xff0c;在深圳有一群比大廠員工更龐大的群體&#xff0c;他們頂著大廠的“名”&#xff0c;做著大廠的工作&#xff0c;還可以享受大廠的伙食&#xff0c;卻沒有大廠…

12.11 C++ 作業

完善對話框&#xff0c;點擊登錄對話框&#xff0c;如果賬號和密碼匹配&#xff0c;則彈出信息對話框&#xff0c;給出提示”登錄成功“&#xff0c;提供一個Ok按鈕&#xff0c;用戶點擊Ok后&#xff0c;關閉登錄界面&#xff0c;跳轉到其他界面 如果賬號和密碼不匹配&#xf…

樹根研習社|數據為王,洞察“工業數據采集”背后的價值與實踐

一、工業數據采集是什么&#xff1f; 數據采集是將各種信息傳感設備通過網絡結合起來&#xff0c;實現任何時間、任何地點&#xff0c;人、機、物的互聯互通。數據采集的主要的作用是&#xff1a; “翻譯官”&#xff1a;不同程序語言的設備數據通過協議解析“翻譯”為上層系…

淘寶權益玩法平臺的Serverless化實踐

通過對權益玩法平臺現有業務應用的Serverless化改造&#xff0c;權益團隊在雙十一期間完美地支撐了業務需求&#xff0c;在研發效率、運維保障等方面都體現出了很高的價值和收益。 項目背景 淘寶權益平臺是負責淘寶權益營銷的核心團隊&#xff0c;團隊除了負責拉菲權益平臺外&a…

1.cloud-微服務架構編碼構建

1.微服務cloud整體聚合父工程 1.1 New Project 1.2 Maven選版本 1.3 字符編碼 1.4 注解生效激活 主要為lombok中的Data 1.5 java編譯版本選8 1.6 File Type過濾 *.hprof;*.idea;*.iml;*.pyc;*.pyo;*.rbc;*.yarb;*~;.DS_Store;.git;.hg;.svn;CVS;__pycache__;_svn;vssver.scc;v…