Qt中的布局

? ? ? Qt6.8的布局管理系統,用于自動排列部件:水平布局QHBoxLayout、垂直布局QVBoxLayout、網格布局QGridLayout、表單布局QFormLayout

? ? ? 布局(layout)是一種優雅而靈活的方式,可以在其容器內自動排列子部件(child widgets)。每個部件通過sizeHint和sizePolicy屬性向布局報告其尺寸要求,布局會相應地分配可用空間

? ? ? Qt布局系統(layout system)提供了一種簡單而強大的方法,可以自動排列部件中的子部件,以確保它們充分利用可用空間。

? ? ? Qt包含一組布局管理類,用于描述部件在應用程序用戶界面中的布局方式當部件的可用空間發生變化時,這些布局會自動定位和調整部件的大小,以確保部件的排列一致,并確保整個用戶界面保持可用

? ? ? 所有QWidget子類都可以使用布局來管理其子項。QWidget::setLayout()函數將布局應用于部件。當以這種方式在部件上設置布局時,它將負責以下任務:

? ? ? (1).子部件的定位

? ? ? (2).合理的窗口默認大小

? ? ? (3).合理的窗口最小大小

? ? ? (4).調整大小處理

? ? ? (5).內容更改時的自動更新:子部件的字體大小、文本或其它內容;隱藏或顯示子部件;移除子部件

? ? ? Qt的布局類專為手寫C++代碼而設計,允許以像素為單位指定測量值,從而簡化了代碼的理解和使用。使用Qt Widgets Designer創建的表單(form)生成的代碼也使用了布局類。Qt Widgets Designer在嘗試表單設計時非常有用,因為它避免了用戶界面開發中通常涉及的編譯、鏈接和運行周期。

? ? ? 為Widget提供良好布局的最簡單方法是使用內置布局管理器:QHBoxLayout、QVBoxLayout、QGridLayout和QFormLayout。這些類繼承自QLayout,而QLayout又派生自QObject(而非QWidget)。它們負責一組Widget的幾何管理(geometry management)。要創建更復雜的布局,你可以將布局管理器嵌套使用。

? ? ? (1).QHBoxLayout:將部件布置在水平行中,從左到右(對于從右到左的語言,則從右到左)。

? ? ? (2).QVBoxLayout:將部件從上到下排列在垂直列中。

? ? ? (3).QGridLayout:在二維網格中布局部件。部件可以占據多個單元格。

? ? ? (4).QFormLayout:以2列描述性標簽字段樣式布置部件。

? ? ? 使用布局的技巧

? ? ? (1).使用布局時,構造子部件時無需傳遞父級。布局會自動重新設置部件的父級(使用QWidget::setParent()),使它們成為安裝該布局的部件的子級。注意:布局中的部件是安裝該布局的部件的子級,而不是布局本身的子級。部件只能以其他部件為父級,而不能以布局為父級。

? ? ? (2).你可以使用addLayout()在布局上嵌套布局;內部布局將成為其所插入布局的子級。

? ? ? 將部件添加到布局時,布局過程如下:

? ? ? (1).所有部件最初都會根據其QWidget::sizePolicy()和QWidget::sizeHint()分配一定大小的空間。

? ? ? (2).如果任何部件設置的拉伸因子(stretch factor)大于零,則它們會根據拉伸因子的比例分配空間。

? ? ? (3).如果任何部件設置的拉伸因子為零,則只有在沒有其他部件需要空間的情況下,它們才會獲得更多空間。其中,首先會將空間分配給采用擴展大小策略(Expanding size policy)的部件。

? ? ? (4).任何分配空間小于其最小尺寸(如果未指定最小尺寸,則為最小尺寸提示(hint))的部件都會分配其所需的最小尺寸。(部件無需設置最小尺寸或最小尺寸提示,在這種情況下拉伸因子是其決定因素。)

? ? ? (5).任何分配空間大于其最大尺寸的部件都會分配其所需的最大尺寸。(部件無需設置最大尺寸,在這種情況下拉伸因子是其決定因素。)

? ? ? 拉伸因子:Widget通常在創建時不設置任何拉伸因子。當它們在布局中布局時,會根據其QWidget::sizePolicy()或最小尺寸提示,以較大者為準分配相應的空間。拉伸因子用于更改Widget所占空間的比例。

? ? ? 布局中自定義Widget

? ? ? (1).創建自己的Widget類時,還應該傳遞其布局屬性。如果Widget使用了Qt布局中的一個,則布局屬性已處理完畢。如果Widget沒有任何子Widget,或者使用手動布局,則可以使用以下任何或所有機制更改Widget的行為:

? ? ? 重新實現QWidget::sizeHint()以返回Widget的首選大小。

? ? ? 重新實現QWidget::minimumSizeHint()以返回Widget可以擁有的最小大小。

? ? ? 調用QWidget::setSizePolicy()以指定Widget的空間需求。

? ? ? (2).每當尺寸提示、最小尺寸提示或尺寸策略發生變化時,都應調用QWidget::updateGeometry()。這將導致重新計算布局。多次連續調用 QWidget::updateGeometry()只會導致一次布局重新計算。

? ? ? 在Qt Creator中使用布局,如下圖所示:

? ? ? 注:以上整理的內容主要來自于Qt官方文檔

? ? ? GitHub:https://github.com/fengbingchun/Qt_Test

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

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

相關文章

Agent成本降低46%:緩存規劃器的思路模板

論文標題 Cost-Efficient Serving of LLM Agents via Test-Time Plan Caching 論文地址 https://arxiv.org/pdf/2506.14852 作者背景 斯坦福大學 動機 大模型能力的飛速進步催收了大量 AI 智能體應用,它們協調多種模型、工具、工作流來解決實際復雜任務。然而…

Vue 3 + Axios 完整入門實戰指南

從入門到深入,手把手教你在 Vue 3 中正確使用 Axios,支持全局掛載、局部分離、使用 proxy 連接場景,適合所有前端小白和實戰設計。 大家好,我是石小石!一個熱愛技術分享的開源社區貢獻者,小冊《油猴腳本實戰…

CppCon 2017 學習:Effective Qt: 2017 Edition

這段內容講的是 Qt 容器(Qt Containers)和標準庫容器(STL Containers)之間的選擇和背景: 主要觀點: Qt 容器的歷史背景 Qt 自身帶有一套容器類(如 QList, QVector, QMap 等)&#…

Pandas 核心數據結構詳解:Series 和 DataFrame 完全指南

1. 前言:為什么需要 Pandas 數據結構? 在數據處理和分析中,我們需要高效的方式來存儲和操作結構化數據。Python 原生的列表(List)和字典(Dict)雖然靈活,但缺乏針對數據分析的優化。…

使用 Solscan API 的開發指南:快速獲取 Solana 鏈上數據

Solana 生態中有多個區塊瀏覽器,其中 Solscan 提供了功能全面的 API,適用于查詢地址資產、Solana 生態中有多個區塊瀏覽器,其中 Solscan 提供了功能全面的 API,適用于查詢地址資產、交易詳情、合約交互等多種開發場景。相比直接使…

高效工具-libretv

什么是libretv? LibreTV 是一個輕量級、免費的在線視頻搜索與觀看平臺,提供來自多個視頻源的內容搜索與播放服務。無需注冊,即開即用,支持多種設備訪問。項目結合了前端技術和后端代理功能,可部署在支持服務端功能的各類網站托管…

回溯----5.括號生成

題目鏈接 /** 合法括號生成規則: 第一個括號必須是左括號(第一個為右必定無法閉合) 選擇過程中左括號數量必須小于n才可選擇左括號(大于n則一定有括號無法閉合) 左括號數量必須大于右括號數量才可選擇右括號(相等代表所有前驅括號都已閉合) 所需參數: left 記錄已選擇左括號數…

【weaviate】分布式數據寫入之LSM樹深度解析:讀寫放大的權衡

文章目錄 一、LSM樹的設計哲學:寫優化的根本動機1、 傳統B樹存儲的性能瓶頸2、 LSM樹的根本性創新 二、寫入路徑的深度技術分析1、 WAL機制的精密設計2、 MemTable的數據結構3、 刷盤(Flush)過程的技術細節 三、Compaction策略:LS…

Pygame 大魚吃小魚

【Pygame 大魚吃小魚】是一款基于Python編程語言和Pygame庫開發的趣味游戲。Pygame是Python中一個廣泛用于開發2D游戲的開源模塊集合,它提供了豐富的功能,如窗口管理器、事件處理、圖形繪制等,使得初學者也能快速上手創建游戲。 這段 Python …

【為什么在觸發的事件中修改控件屬性需要使用`Invoke`】

在C#中,特別是在使用Windows Forms或WPF等GUI框架時,控件的屬性和狀態通常只能在創建它們的線程(即UI線程,即主線程或用戶界面線程)中直接修改。這是由于這些框架的設計基于單線程模型,其中所有與用戶界面&…

Android 當apk是系統應用時,無法使用webView的解決方案

最近在做項目時,遇到了一個無法使用webView的問題,apk是系統應用,點擊加載webView時應用就是崩潰,原因是系統應用時,Android會覺得webView不安全,不避讓加載。 解決的思路就是使用映射,把原生的…

ArcGIS Pro無插件加載(無偏移)天地圖!一次添加長久使用

以前我們介紹過:ArcGIS無插件加載(無偏移)天地圖。這次我們來介紹ArcGIS Pro中如何添加天地圖。 我們將通過從天地圖官網自己添加服務鏈接并添加至收藏的方式以及應急的方法來做本次的介紹。天地圖的數據主要包括影像、電子地圖、地形圖等。我…

Go堆內存管理

# Go堆內存管理 1. Go內存模型層級結構 Golang內存管理模型與TCMalloc的設計極其相似。基本輪廓和概念也幾乎相同,只是一些規則和流程存在差異。 2. Go內存管理的基本概念 Go內存管理的許多概念在TCMalloc中已經有了,含義是相同的,只是名字…

零售 EDI:Chewy EDI 項目注意事項

在此前的文章《供應商對接Chewy的EDI需求》中,介紹了Chewy的EDI需求,本文主要為大家分享Chewy對于各個業務單據的細節性需求,了解這些細節性注意事項將幫助企業快速基于知行軟件提供的EDI服務與Chewy建立EDI對接。 基于知行之橋EDI系統能夠通…

Android錄制視頻自帶鋪滿多行水印

文章目錄 引言環境要求代碼實現總結 引言 之前做過幾種水印需求,這篇文章是關于使用Android原生庫開發錄制視頻自帶滿幀文字水印。 環境要求 Android 7.0以上Android Studio ,官方開發者官網視頻錄制功能參考開源庫PictureSelector的camerax庫 //用到的…

觀遠ChatBI:加速零售消費企業數據驅動的敏捷決策

近年來,隨著國產大模型(如DeepSeek)的快速發展,企業對智能化數據分析工具的需求日益增長。觀遠數據推出的ChatBI,基于大語言模型(LLM)打造,旨在通過自然語言交互降低數據分析門檻&am…

鴻蒙NEXT-鴻蒙三層架構搭建,嵌入HMRouter,實現便捷跳轉,新手攻略。(1/3)

接下來,我將手把手帶領大家去完善,搭建一個鴻蒙的三層架構,另實現HMRouter的嵌入。完成后,大家可任意跳轉頁面,在三層架構中,書寫屬于自己的篇章。 第0步,項目與AGC華為控制臺關聯起來 首先AG…

鴻蒙ArkTs仿網易云音樂項目:架構剖析與功能展示

鴻蒙ArkTs仿網易云音樂項目:架構剖析與功能展示 一、引言 在移動應用開發的浪潮中,音樂類應用始終占據著重要的一席之地。網易云音樂憑借其豐富的音樂資源、個性化的推薦算法和獨特的社交互動功能,深受廣大用戶的喜愛。本文將詳細介紹一個基…

【web 安全】從 HTTP 無狀態到現代身份驗證機制

文章目錄 Web 安全與系統設計Web存在的問題:Web 是無狀態的解決方案一、早期解決方案:Session Cookie 的誕生二、第二階段:Token 的出現(前后端分離 移動端的解決方案)三、分析總結:1.早期版本&#xff1…

FlutterUnit TolyUI | 布局游樂場

FlutterUnit 基于 TolyUI 大大簡化了界面構建的代碼復雜程度,因此之前想要實現的一些小功能,就可以輕松支持。布局游樂場是通過交互的方式來 直觀體驗 組件的布局特性,從而更易學和掌握。目前 FlutterUnit 已在 知識集錄模塊新增了 布局寶庫&…