Qt 常用控件 - 1

?

控件概述

編程講究的是 --- 站在巨人的肩膀上 --- 不是編寫一個圖形化界面上的內容 --- Qt 已經提供了很多控件了!!!提高圖形化界面的開發效率!!!重點變成我們怎么使用這些已有的控件!?

Widget 是 Qt 中的核心概念,英文原義是“小部件”,此處翻譯為“控件”。控件是構成圖形化界面的基本要素,如按鈕、列表視圖、樹形視圖、單行輸入框、多行輸入框、滾動條、下拉框等都屬于控件。

Qt 作為成熟的 GUI 開發框架,內置大量常用控件,且可通過 Qt Designer 看到。Qt 還支持自定義控件,以滿足特定需求。

分類子控件類型
Layouts(布局)Vertical Layout(垂直布局), Horizontal Layout(水平布局), Grid Layout(網格布局), Form Layout(表單布局)
Spacers(間隔器)
Buttons(按鈕)Push Button(按鈕), Tool Button(工具按鈕), Radio Button(單選按鈕), Check Box(復選框), Command Button(命令按鈕), Dialog Button(對話框按鈕)
Item Views(項視圖)List View(列表視圖), Tree View(樹形視圖), Table View(表格視圖), Column View(列視圖), List Widget(列表控件), Tree Widget(樹形控件), Table Widget(表格控件)
Containers(容器)Group Box(分組框), Scroll Area(滾動區域), Tool Box(工具箱), Tab Widget(標簽控件), Stacked Widget(堆疊控件), Frame(框架), Widget(控件), MDI Area(MDI區域), Dock Widget(停靠控件), QaxWidget(Qax控件)
Input Widgets(輸入控件)Combo Box(組合框), Font Combo Box(字體組合框), Line Edit(行編輯框), Text Edit(文本編輯框), Plain Text Edit(純文本編輯框), Spin Box(微調框), Double Spin Box(雙微調框), Time Edit(時間編輯框), Date Edit(日期編輯框), Date/Time Edit(日期/時間編輯框), Dial(撥號盤)
Sliders(滑塊)Horizontal Bar(水平條), Vertical Bar(垂直條), Horizontal Slider(水平滑塊), Vertical Slider(垂直滑塊)
Key Sequence Edit(鍵序列編輯)
Display Widgets(顯示控件)Label(標簽), Text Browser(文本瀏覽器), Graphics View(圖形視圖), Calendar Widget(日歷控件), LCD Number(LCD數字顯示), Progress Bar(進度條), Horizontal Line(水平線), Vertical Line(垂直線)

這個表格將 Qt 控件按照其功能和用途進行了分類,并列出每個分類下的子控件類型!


Qt 近幾年還提供了 Qt Design Studio --- 對標現代化的界面體系 --- 制作出來的頁面的美觀程度是業界最領先的一檔!!!但是目前收費!!!哭了~~~

Qt 中的各種控件都繼承自 QWidget 這個類!--- Qt 控件體系中,通用的一部分!

但是:學習 Qt 時,熟悉并掌握內置常用控件是重要任務,這些控件對快速開發符合需求的界面至關重要。

控件體系的發展經歷了三個階段:

  • 第一階段:完全沒有控件,需通過繪圖 API 手動繪制按鈕、輸入框等內容,代碼繁瑣,如文曲星的 Lava 平臺開發。

  • 第二階段:只包含粗略的控件,如按鈕、輸入框、單選框、復選框等最常用控件,例如 html 的原生控件。

  • 第三階段:更完整的控件體系,基本覆蓋 GUI 開發中的大部分場景,如早期的 MFC、VB、C++ Builder、Qt、Delphi,后來的 Android SDK、Java FX、前端的各種 UI 庫等。前端中的 Element-ui 的控件在豐富程度和顏值上比 Qt 自帶的控件更勝一籌。

QWidget 核心屬性

在 Qt 中,使用 QWidget 類表示“控件”,具體控件類如按鈕、視圖、輸入框、滾動條等都繼承自 QWidget。QWidget 包含了 Qt 整個控件體系中通用的部分。

在 Qt Designer 中,拖動控件后,選中該控件,可在右下方看到 QWidget 中的屬性,這些屬性既可通過 Qt Designer 直接修改,也可通過代碼方式修改,具體含義在 Qt Assistant 中有詳細介紹,搜索 QWidget 即可找到文檔說明,或在 Qt Creator 代碼中選中 QWidget 按 F1 查看。

核心屬性概覽

屬性名描述
enabled設置控件是否可用,true 表示可用,false 表示禁用。
geometry位置和尺寸,包含 x、y、width、height 四個部分,坐標以父元素為參考。
windowTitle設置 widget 標題。
windowIcon設置 widget 圖標。
windowOpacity設置 widget 透明度。
cursor鼠標懸停時顯示的圖標形狀,如普通箭頭、沙漏、十字等,在 Qt Designer 界面中有可選項。
font字體相關屬性,涉及字體家族、字體大小、粗體、斜體、下劃線等樣式。
toolTip鼠標懸停在 widget 上時在狀態欄中顯示的提示信息。
toolTipDurationtoolTip 顯示的持續時間。
statusTipWidget 狀態發生改變時顯示的提示信息(如按鈕被按下等)。
whatsThis鼠標懸停并按下 alt+F1 時顯示的幫助信息,顯示在一個彈出的窗口中。
styleSheet允許使用 CSS 來設置 widget 中的樣式,Qt 支持的樣式豐富,對前端開發人員友好。
focusPolicy該 widget 如何獲取焦點,有以下幾種方式:



?
contextMenuPolicy上下文菜單的顯示策略,有以下幾種:



?
locale設置語言和國家地區。
acceptDrops該部件是否接受拖放操作。如果設置為 true,該部件可以接收來自其他部件的拖放操作,并會接收到相應的拖放事件;如果設置為 false,則不會接收任何拖放操作。
minimumSize控件的最小尺寸,包含最小寬度和最小高度。
maximumSize控件的最大尺寸,包含最大寬度和最大高度。
sizePolicy尺寸策略,設置控件在布局管理器中的縮放方式。
windowModality指定窗口是否具有“模態”行為。
sizeIncrement拖動窗口大小時的增量單位。
baseSize窗口的基礎大小,用來搭配 sizeIncrement 調整組件尺寸時計算組件應該調整到的合適值。
palette調色板,可以設置 widget 的顏色風格。
mouseTracking是否要跟蹤鼠標移動事件。如果設為 true,表示需要跟蹤,鼠標劃過時該 widget 能持續收到鼠標移動事件;如果設為 false,表示不需要跟蹤,鼠標劃過時 widget 不會收到鼠標移動事件,只能收到鼠標按下或者釋放的事件。
tabletTracking是否跟蹤觸摸屏的移動事件,類似于 mouseTracking,是 Qt 5.9 中引入的新屬性。
layoutDirection布局方向,有以下幾種:

?
autoFillBackground是否自動填充背景顏色。
windowFilePath能夠把 widget 和一個本地文件路徑關聯起來,但作用不大。
accessibleName設置 widget 的可訪問名稱,這個名稱可以被輔助技術(像屏幕閱讀器)獲取到,用于實現無障礙程序的場景中,比如給盲人寫的程序。其實盲人也可以使用電腦和手機,甚至能成為程序員,可參考鏈接我采訪了幾位盲人程序員,看看他們是怎么寫代碼的【差評君】_嗶哩嗶哩_bilibili。
accessibleDescription設置 widget 的詳細描述,作用同 accessibleName。
inputMethodHints針對輸入框有效,用來提示用戶當前能輸入的合法數據的格式,比如只能輸入數字、只能輸入日期等。

接下來會介紹一些比較重要比較常用的屬性,并附有代碼示例!

enabled

方法 --- API描述 --- 功能
isEnabled()獲取到控件的可用狀態。
setEnabled(bool)設置控件是否可用,true?表示可用,false?表示禁用。

所謂“禁用”指的是該控件不能接收任何用戶的輸入事件,并且外觀上往往是灰色的。如果一個 widget 被禁用,則該 widget 的子元素也被禁用。

代碼示例:使用代碼創建一個禁用狀態的按鈕 --- widget.cpp

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QPushButton* btn = new QPushButton(this);btn->setText("這是個被禁用的按鈕");btn->setEnabled(false);
}

運行程序,可以看到按鈕處于灰色狀態,無法被點擊。

代碼示例:通過按鈕2 切換按鈕1 的禁用狀態.

使用 Qt Designer 拖兩個按鈕到 Widget 中,兩個按鈕的 objectName 分別為 pushButton 和 pushButton_2

📚 QObject 的 objectName 屬性介紹: QObject 是 QWidget 的父類.。里面最主要的屬性就是 objectName 。

在一個 Qt 程序中,objectName 相當于對象的身份標識,彼此之間不能重復.。

在使用 Qt Designer 時, 尤其是界面上存在多個 widget 的時候, 可以通過 objectName 獲取到指定的 widget 對象。Qt Designer 生成的 ui 文件, 本身是 xml 格式的。qmake 會把這個 xml 文件轉換成 C++ 的 .h 文件(這個文件生成在 build 目錄中),構成一個 ui_widget 類。

每個 widget 的 objectName 最終就會成為 ui_widget 類的屬性名字。最終這個類的實例,就是 Ui::Widget *ui ,因此就可以通過形如 ui->pushButton 或者 ui->pushButton_2 這樣的代碼獲取到界面上的 widget 對象了。

class Ui_Widget
{
public:QPushButton *pushButton;QPushButton *pushButton_2;
}

生成兩個按鈕的 slot 函數;

  • 使用 isEnabled 獲取當前按鈕的可用狀態;
  • 使用 setEnabled 修改按鈕的可用狀態;

此處是直接針對原來的可用狀態進行取反后設置。

void Widget::on_pushButton_clicked()
{qDebug() << "按下按鈕";
}
void Widget::on_pushButton_2_clicked()
{bool flag = this->ui->pushButton->isEnabled();this->ui->pushButton->setEnabled(!flag);
}

運行程序,可以看到,初始情況下,上面的按鈕是可用狀態,點擊下方按鈕,即可使上方按鈕被禁用;?

再次點擊下方按鈕,上方按鈕就會解除禁用。?(禁用狀態的按鈕為 灰色, 且不可點擊)?

🥛 在 Qt Designer 中創建按鈕的時候,可以設置按鈕的初始狀態是 "可用" 還是 "禁用" 。如果把 enabled 這一列的對鉤去掉,則按鈕的初始狀態就是 "禁用" 狀態。




下一篇繼續!!!請持續關注😋😋😋😋😋

下一篇繼續!!!請持續關注😋😋😋😋😋

下一篇繼續!!!請持續關注😋😋😋😋😋

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

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

相關文章

springdoc-openapi-ui的使用教程

<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.6.14</version> </dependency>springdoc-openapi-ui 是一個用于生成 OpenAPI 文檔的庫&#xff0c;它與 Swagger 的關…

【硬件-筆試面試題】硬件/電子工程師,筆試面試題-3,(運放/三極管)

目錄 1、題目 2、解答 【硬件-筆試面試題】硬件/電子工程師&#xff0c;筆試面試題-3&#xff0c;&#xff08;運放/三極管&#xff09; 這是一道大疆的筆試題 1、題目 2、解答

SQL Server 數據類型的含義、特點及常見使用場景的詳細說明

數值類型 bigint 含義:用于存儲大范圍的整數,是 8 字節(64 位)有符號整數類型。 范圍:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 。 場景:適合存儲像訂單編號(可能很大)、系統中需要大范圍計數的標識等,比如大型系統中大量數據的主鍵自增列(數據量極…

WPF的一些基礎知識學習記錄

路由事件 路由事件(Routed Event)是WPF事件系統的核心&#xff0c;它允許事件在元素樹中傳播&#xff0c;而不僅僅局限于引發事件的對象。包含以下三類&#xff1a;類型方向觸發順序典型用途示例事件??直接事件(Direct Event)??不路由只在源元素觸發類似傳統.NET事件MouseE…

【補題】Codeforces Round 1000 (Div. 2) C. Remove Exactly Two

題意&#xff1a;給一個樹&#xff0c;可以從里面刪去兩個點&#xff0c;使連通塊數量最大 思路&#xff1a;題解&#xff1a;CF2063C Remove Exactly Two - 洛谷專欄 這道題很容易想到&#xff0c;直接刪去度最多的兩個點就行了&#xff0c;但是這并不對&#xff0c;因為相鄰…

基于php的校園招聘平臺

學生&#xff1a;注冊&#xff0c;登錄&#xff0c;個人中心&#xff0c;學生應聘管理&#xff0c;面試邀請管理企業&#xff1a;登錄&#xff0c;個人中心&#xff0c;招聘信息管理&#xff0c;學生應聘管理&#xff0c;面試邀請管理管理員&#xff1a;登錄&#xff0c;個人中…

在 Ubuntu 22.04 上運行 cAdvisor 時遇到 mountpoint for cpu not found 錯誤

通常是由于 cgroup v2 導致的兼容性問題。Ubuntu 22.04 默認使用 cgroup v2&#xff0c;而舊版本的 cAdvisor 可能不完全支持它。以下是解決方案&#xff1a;方法 1&#xff1a;啟用 cgroup v1&#xff08;推薦&#xff09;臨時切換回 cgroup v1&#xff08;cAdvisor 兼容性更好…

如何讓RAGFLow每次知識檢索都是返回知識庫中的所有文檔?

在使用raglfow過程中,有時候輸入的文本檢索為空,要么就是只返回幾條.如果想要看到所有知識庫里文本返回,就得需要去到源碼里修改這個參數minimum_should_match(路徑:rag/utils/es_conn.py),將其設置為0%,即可返回所有文本!!

「iOS」——KVO

源碼學習iOS底層學習&#xff1a;KVO 底層原理KVO注冊 KVO 監聽 實現 KVO 監聽 移除 KVO 監聽 處理變更通知 手動KVO(禁用KVO)關閉自動通知手動實現 setter 方法KVO 和線程如果 KVO 是多線程的**單線程的保證**如果沒有 prior 選項**prior 選項的作用**KVO 實現原理派生類重寫的…

Unreal5從入門到精通之使用 Python 編寫虛幻編輯器腳本

文章目錄 前言 如何運行Python 1.控制臺 2.藍圖調用python python 入門 變量 數據類型 運算符 條件判斷 循環 函數 模塊引用 類型轉換 類 類方法 繼承 構造函數 unreal API 創建材質 創建材質實例 獲取Content下選中資源 獲取關卡中選中Actors 放置Cube 編輯器進度條 展示對話框…

Django3 - Web前端開發基礎 HTML、CSS和JavaScript

網站開發可以分為前端開發和后端開發&#xff0c;前端開發是指網頁設計&#xff0c;我們在瀏覽器看到網站的圖片、文字、音樂視頻等內容排版都是由前端開發人員實現的&#xff1b;后端開發是為前端開發提供實際的數據內容和業務邏輯&#xff0c;比如提供文字內容、圖片和音樂視…

Nginx和Apache的區別

一。Nginx和Apache的優缺點和對比Nginx 優點Apache 優點性能與并發采用事件驅動模型&#xff0c;支持 10 萬 高并發連接&#xff0c;資源&#xff08;CPU / 內存&#xff09;占用極低生態成熟&#xff0c;內置模塊可直接處理動態內容&#xff0c;無需依賴第三方程序配置與部署…

前端實現可編輯腦圖的方案

前端實現可編輯腦圖的方案 實現可編輯腦圖(Mind Map)在前端有多種方案&#xff0c;以下是一些主流的技術方案&#xff1a; 1. 基于現有開源庫的方案 JavaScript 庫 MindElixir: 輕量級開源腦圖庫&#xff0c;支持節點增刪改、拖拽、導入導出等 GitHub: https://github.com/sssh…

7-大語言模型—指令理解:指令微調訓練+模型微調

目錄 1、指令微調的訓練過程 2、指令微調數據 2.1、“指令輸入” 2.2、“答案輸出” 3、指令微調數據的構建方法 3.1、手動構建&#xff1a;純人工 “出題 寫答案” 3.1.1、構建流程 3.1.1.1、定義任務類型 3.1.1.2、設計指令模板 3.1.1.3、人工標注響應 3.1.2、工…

服務器版本信息泄露-iis返回包暴露服務器版本信息

漏洞信息描述&#xff1a;服務器版本信息泄露 測試過程&#xff1a;訪問http://192.168.23.63&#xff0c;看返回包可以得知服務器版本信息 顯示暴露返回server版本信息 修復建議&#xff1a;限制返回包帶有服務器版本信息 如何隱藏IIS Web服務響應頭中的IIS Server版本信息…

rust嵌入式開發零基礎入門教程(二)

本教程的第二部分&#xff0c;我們將深入理解 Rust 語言的核心概念——所有權&#xff08;Ownership&#xff09;、借用&#xff08;Borrowing&#xff09;和生命周期&#xff08;Lifetimes&#xff09;。這些是 Rust 內存安全的基礎&#xff0c;也是初學者理解 Rust 最關鍵的部…

【黑產大數據】2025年上半年互聯網黑灰產趨勢年度總結

2025年上半年&#xff0c;互聯網黑灰產攻擊持續演化&#xff0c;呈現出更隱蔽、更智能、更產業化的趨勢。黑灰產從業人員數量繼續增長&#xff0c;攻擊資源、技術與作案場景全面升級。整體來看&#xff0c;2025年上半年黑灰產行業發生的幾大事件&#xff0c;也時刻印證了黑灰產…

低代碼/無代碼平臺如何重塑開發生態

低代碼/無代碼平臺通過降低技術門檻、提升開發效率、推動業務和IT深度融合重塑開發生態。 具體而言&#xff0c;低代碼/無代碼平臺極大降低了應用開發的技術門檻&#xff0c;使得非專業人員也能輕松構建業務應用。此外&#xff0c;它們通過可視化的開發模式&#xff0c;大幅提升…

ICA學習(2)

1.公式推導1.1兩個問題ICA算法會帶來2個不確定性&#xff1a;幅值不確定性和順序不確定性。1.2 推導觀測數據 x 是盲源 s 的線性混合&#xff1a;x As (1)此時&#xff0c;W矩陣是未知的&#xff0c;ICA算法的目的便是找到一個最優的矩陣W&#xff0c;實現對矩陣…

【愚公系列】《MIoT.VC》002-構建基本仿真工作站(布局一個基本工作站)

??【行業認證權威頭銜】 ? 華為云天團核心成員:特約編輯/云享專家/開發者專家/產品云測專家 ? 開發者社區全滿貫:CSDN博客&商業化雙料專家/阿里云簽約作者/騰訊云內容共創官/掘金&亞馬遜&51CTO頂級博主 ? 技術生態共建先鋒:橫跨鴻蒙、云計算、AI等前沿領域…