Qt:15.布局管理器(QVBoxLayout-垂直布局、QHBoxLayout-水平布局、QGridLayout-網格布局、拉伸系數,控制控件顯示的大小)

目錄

一、QVBoxLayout-垂直布局:

1.1QVBoxLayout介紹:

1.2 屬性介紹:

1.3細節理解:

二、QHBoxLayout-水平布局:

三、QGridLayout-網格布局:

3.1QGridLayout介紹:

3.2常用方法:

四、拉伸系數,控制控件顯示的大小:

4.1拉伸系數介紹:

4.2水平拉伸-控件的寬度:

4.3控件的大小策略:

4.4垂直拉伸-控件的高度:


一、QVBoxLayout-垂直布局:

1.1QVBoxLayout介紹:

  • QVBoxLayout 是Qt中的一個布局管理器。
  • 用于將子控件垂直排列。它會自動調整子控件的大小和位置,使它們在垂直方向上依次排列,占據可用的空間。
  • 將控件添加到布局管理器:layout->addWidget(控件名);
  • 將布局管理器掛到對象樹:this->setLayout(layout_1);
  • 將布局管理器添加到布局管理器:layout_1->addLayout(layout_2);

1.2 屬性介紹:

layoutLeftMargin
  • 設置布局左側的邊距。
  • 獲取當前左邊距:layout->contentsMargins().left()
layoutTopMargin
  • 設置布局頂部的邊距。
  • 獲取當前頂部邊距:layout->contentsMargins().top()
layoutRightMargin
  • 設置布局右側的邊距。
  • 獲取當前右邊距:layout->contentsMargins().right()
layoutBottomMargin
  • 設置布局底部的邊距。
  • 獲取當前底部邊距:layout->contentsMargins().bottom()
layoutSpacing
  • 設置子控件之間的間距。
  • 獲取當前間距:layout->spacing()
  • 設置間距:layout->setSpacing(spacing)
layoutStretch
  • 設置子控件的伸縮因子。
  • 設置伸縮因子:layout->setStretch(index, stretch)
  • 獲取當前伸縮因子:layout->stretch(index)
layoutSizeConstraint
  • 設置布局的尺寸約束。
  • 獲取當前尺寸約束:layout->sizeConstraint()
  • 設置尺寸約束:layout->setSizeConstraint(constraint)

1.3細節理解:

  • 一個Widget只能創建一個布局管理器。
  • 通過代碼創建的布局管理器,調整窗口的大小,里面的控件也會隨之拉伸。
  • 通過ui界面可以創建多個布局管理器,但是創建多余一個的布局管理器前,會先創建一個Widget,此時拉申程序的窗口,控件不會隨著伸縮。

二、QHBoxLayout-水平布局:

  • QHBoxLayout 是Qt中的一個布局管理器。
  • 用于將子控件水平排列。它會自動調整子控件的大小和位置,使它們在水平方向上依次排列,占據可用的空間。
  • 屬性和垂直布局相同。

三、QGridLayout-網格布局:

3.1QGridLayout介紹:

  • QGridLayout 是 Qt 中的一種布局管理器,用于在網格中排列子控件。它允許在特定的行和列中添加控件或其他布局。

3.2常用方法:

void addLayout(QLayout *layout, int row, int column)
  • 將子布局添加到特定位置
  • layout:要添加的子布局。
  • row:子布局所在的行。
  • column:子布局所在的列。
void addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan)
  • 將子布局添加到特定位置,并指定行跨度和列跨度
  • layout:要添加的子布局。
  • row:子布局起始行。
  • column:子布局起始列。
  • rowSpan:子布局占用的行數。
  • columnSpan:子布局占用的列數。

四、拉伸系數,控制控件顯示的大小:

4.1拉伸系數介紹:

  • 通過代碼創建的控件,將它添加到布局管理器后,他們的大小是均等的。
  • 如果要創建出大小不同的控件,就需要通過拉伸系數設置控件。
  • 拉伸系數就相當于設置控件之間的比例。

4.2水平拉伸-控件的寬度:

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//創建6個按鈕QPushButton* b1=new QPushButton("1");QPushButton* b2=new QPushButton("2");QPushButton* b3=new QPushButton("3");QPushButton* b4=new QPushButton("4");QPushButton* b5=new QPushButton("5");QPushButton* b6=new QPushButton("6");//創建一個網格布局控制器,并將6個按鈕分為兩行,每行三個QGridLayout* layout=new QGridLayout();layout->addWidget(b1,0,0);layout->addWidget(b2,0,1);layout->addWidget(b3,0,2);layout->addWidget(b4,1,0);layout->addWidget(b5,1,1);layout->addWidget(b6,1,2);//設置拉伸系數this->setLayout(layout);layout->setColumnStretch(0,1);layout->setColumnStretch(1,3);layout->setColumnStretch(2,5);}

  • 如果將拉伸系數設為0,那么對應列的控件的水平寬度是一個固定值,不再參與比例拉伸。
  • 設置水平拉伸因子:layout->setColumnStretch(column,stretch);

4.3控件的大小策略:

  • 在 Qt 中,控件的大小策略(QSizePolicy)定義了控件在布局管理器中的行為方式,包括如何在水平和垂直方向上拉伸和收縮。默認情況下,控件的 QSizePolicy 會影響它們在布局中的拉伸和縮放行為。
  • 每個控件在創建時都有一個默認的 QSizePolicy。QSizePolicy 包含兩個主要屬性:水平策略和垂直策略。
  • 不同控件可能有不同的默認策略。
  • QSizePolicy 主要有以下幾種常見的策略:
  • QSizePolicy::Fixed:控件的大小是固定的,不會改變。
  • QSizePolicy::Minimum:控件可以收縮到比推薦的大小更小,但不會拉伸。
  • QSizePolicy::Maximum:控件可以拉伸到比推薦的大小更大,但不會收縮。
  • QSizePolicy::Preferred:控件會根據其推薦的大小進行調整,但可以在必要時拉伸或收
  • 縮。
  • QSizePolicy::Expanding:控件會盡可能地拉伸以填充可用空間。
  • QSizePolicy::Ignored:控件的大小不受其內容或推薦大小的影響,可以任意調整。

4.4垂直拉伸-控件的高度:

  • label的水平拉伸默認策略為QSizePolicy::Expanding,但是他的垂直拉伸的默認策略是QSizePolicy::Fixed。
  • 如果想要和水平拉伸一樣自由拉伸,就要手動設置label的拉伸策略為QSizePolicy::Expanding。
  • 下面通過兩個圖片對比設置拉伸策略后的差異:

????????

????????

  • 當垂直方向可以自由拉伸之后。就可以設置比例拉伸了。
  • 設置垂直拉伸因子:layout->setRowStretch(column,stretch);

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

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

相關文章

如何在 Windows 10 上恢復未保存的 Word 文檔

您是否整晚都在處理一個重要的 word 文件,但忘記保存它了?本文適合您。在這里,我們將解釋如何恢復未保存的 word 文檔。除此之外,您還將學習如何恢復已刪除的 word 文檔。 從專業人士到高中生,每個人都了解丟失重要 W…

three完全開源擴展案例01-三角形漸變

演示地址 import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.jsconst box document.getElementById(box)const scene new THREE.Scene()const camera new THREE.PerspectiveCamera(75, box.clientWidth / box.client…

SQL Server鏡像與日志:數據保護的雙重保障

SQL Server鏡像與日志:數據保護的雙重保障 在SQL Server的高可用性解決方案中,數據庫鏡像和日志傳送是兩種重要的技術,它們都旨在提供數據的安全性和業務連續性。然而,這兩種技術在實現方式和使用場景上有著明顯的區別。本文將深…

時間序列分析方法匯總對比及優缺點和適用情況(上)--1. 移動平均 2. 指數平滑 3. 自回歸模型 4. 移動平均模型 5. 自回歸移動平均模型

目錄 1. 移動平均(Moving Average) 2. 指數平滑(Exponential Smoothing) 3. 自回歸模型(Autoregressive Model, AR) 4. 移動平均模型(Moving Average Model, MA) 5. 自回歸移動…

杜比全景聲——空間音頻技術

什么是杜比?是否是標清、高清、超清之上的更清晰的格式?杜比全景聲 和傳統多聲道立體聲的差別?杜比全景聲音頻的渲染方式?車載平臺上杜比技術的應用? 杜比技術的起源 杜比實驗室(Dolby Laboratories&…

大數據基礎:Hadoop之MapReduce重點架構原理

文章目錄 Hadoop之MapReduce重點架構原理 一、MapReduce概念 二、MapReduce 編程思想 2.1、Map階段 2.2、Reduce階段 三、MapReduce處理數據流程 四、MapReduce Shuffle 五、MapReduce注意點 六、MapReduce的三次排序 Hadoop之MapReduce重點架構原理 一、MapReduce概…

ORACLE重裝之后恢復數據庫,相當于sqlserver的附加數據庫

在開發機器上經常會遇到重裝系統的問題,重裝之前如果ORACLE沒有及時備份的話重裝之后就糾結了,數據還原很頭疼。 只能找到一些ORACLE安裝與重裝系統前目錄相同的解決辦法,目錄不同就沒招了。 我用的是oracle11G。老版的應該相似。 經過我的嘗試,找到了幾個關鍵點,現在分…

講講 JVM 的內存結構(附上Demo講解)

講講 JVM 的內存結構 什么是 JVM 內存結構?線程私有程序計數器?虛擬機棧本地方法棧 線程共享堆?方法區?注意永久代?元空間?運行時常量池?直接內存? 代碼詳解 什么是 JVM 內存結構? JVM內存結構分為5大區域,程序計數器、虛擬機棧、本地…

C# 泛型

泛型 泛型不是語法糖,而是由框架提供的一種便捷語法,首次出現在.NET 2.0中。 1. 泛型定義 泛型:是一種程序特性,定義時不對類型做出明確的規定,使用時規定且不能改變。一般應用:泛型集合、泛型方法、泛型…

機器學習——LR、?GBDT、?SVM、?CNN、?DNN、?RNN、?Word2Vec等模型的原理和應用

LR(邏輯回歸) 原理: 邏輯回歸模型(Logistic Regression, LR)是一種廣泛應用于分類問題的統計方法,尤其適用于二分類問題。其核心思想是通過Sigmoid函數將線性回歸模型的輸出映射到(0,1)區間,從…

【AI前沿】深度學習:神經網絡基礎

文章目錄 📑引言一、神經元和感知器1.1 神經元的基本概念1.2 感知器模型 二、多層感知器(MLP)2.1 MLP的基本結構2.2 激活函數的重要性2.3 激活函數2.4 激活函數的選擇 三、小結 📑引言 深度學習是現代人工智能的核心技術之一&…

kotlin Flow 學習指南 (三)最終篇

目錄 前言Flow生命周期StateFlow 替代LiveDataSharedFlow其他常見應用場景處理復雜、耗時邏輯存在依賴關系的接口請求組合多個接口的數據 Flow使用注意事項總結 前言 前面兩篇文章,介紹了Flow是什么,如何使用,以及相關的操作符進階&#xff…

如何挑選適合的需求池管理系統?10款優質工具分享

本文將分享10款優質需求池管理工具:PingCode、Worktile、Teambition、Epicor Kinetic、TAPD、SAP IBP、Logility、RELEX Solutions、JIRA、明道云。 在管理項目和產品需求時,正確的工具能夠大幅提高效率與透明度。如何從眾多需求池工具中選擇最適合團隊的…

第一節 SHELL腳本中的常用命令(2)

二,網絡管理命令nmcli 1.查看網卡 # 或者先用ip addr或ip a等查看網卡 ip a s 網卡名 ifconfig 網卡名 nmcil device show 網卡名 nmcil device status nmcil connection show 網卡名2.設置網卡 a)當網卡未被設置過時 設置dncp網絡工作模式 nmcil connection add con-name…

Rust編程-編寫自動化測試

編寫單元測試步驟: 1. 準備所需的數據 2. 調用需要測試的代碼 3. 斷言運行結果與我們所期望的一致 Rust的test元數據: #[cfg(test)]:是一個屬性宏(attribute macro)。用于控制特定的代碼段僅在測試環境中編譯…

自定義類型:聯合體

像結構體一樣,聯合體也是由一個或者多個成員組成,這些成員可以是不同的類型。 聯合體類型的聲明 編譯器只為最?的成員分配?夠的內存空間。聯合體的特點是所有成員共?同?塊內存空間。所以聯合體也叫:共?體。 輸出結果: 聯合體…

size_t 數據類型的好處

什么是size_t size_t 類型在不同的平臺上對應不同的底層整數類型,具體取決于平臺的指針大小。size_t 主要用于表示大小和長度,如數組的元素數量、緩沖區的大小等,它的設計目的是為了匹配指針的大小,以避免類型不匹配引起的錯誤。…

代碼隨想錄算法訓練營DAY58|101.孤島的總面積、102.沉沒孤島、103. 水流問題、104.建造最大島嶼

忙。。。寫了好久。。。。慢慢補吧。 101.孤島的總面積 先把周邊的島嶼變成水dfs def dfs(x, y, graph, s):if x<0 or x>len(graph) or y<0 or y>len(graph[0]) or graph[x][y]0:return sgraph[x][y]0s1s dfs(x1, y, graph, s)s dfs(x-1, y, graph, s)s dfs(…

【爬蟲入門知識講解:xpath】

3.3、xpath xpath在Python的爬蟲學習中&#xff0c;起著舉足輕重的地位&#xff0c;對比正則表達式 re兩者可以完成同樣的工作&#xff0c;實現的功能也差不多&#xff0c;但xpath明顯比re具有優勢&#xff0c;在網頁分析上使re退居二線。 xpath 全稱為XML Path Language 一種…

軟考高級第四版備考--第16天(規劃溝通管理)Plan Communication Management

定義&#xff1a;基于每個干系人或干系人群體的信息需求、可用的組織資產以及具體的項目的需求&#xff0c;為項目溝通活動制定恰當的方法和計劃的過程。 作用&#xff1a; 及時向干系人提供相關信息&#xff1b;引導干系人有效參與項目&#xff1b;編制書面溝通計劃&#xf…