Qt之水平/垂直布局(QBoxLayout、QHBoxLayout、QVBoxLayout)

簡述

QBoxLayout可以在水平方向或垂直方向上排列控件,由QHBoxLayout、QVBoxLayout所繼承。

QHBoxLayout:水平布局,在水平方向上排列控件,即:左右排列。?
QVBoxLayout:垂直布局,在垂直方向上排列控件,即:上下排列。

通過查看源碼,我們可以發現,水平布局、垂直布局除了構造時的方向(LeftToRight、TopToBottom)不同外,其它均相同。

下面我們以QHBoxLayout為例,來講解QBoxLayout的常用功能。

?

  • 簡述
  • 使用
    • 效果
    • 源碼
  • 常用接口
  • 總結

?

使用

下面介紹下水平布局的基本使用。

效果

這里寫圖片描述

源碼

下面,我們創建5個按鈕,然后添加至水平不居中。

QPushButton *pButton1 = new QPushButton("One");
QPushButton *pButton2 = new QPushButton("Two"); QPushButton *pButton3 = new QPushButton("Three"); QPushButton *pButton4 = new QPushButton("Four"); QPushButton *pButton5 = new QPushButton("Five"); QHBoxLayout *pHLayout = new QHBoxLayout(); pHLayout->addWidget(pButton1); pHLayout->addWidget(pButton2); pHLayout->addWidget(pButton3); pHLayout->addWidget(pButton4); pHLayout->addWidget(pButton5); setLayout(pHLayout);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

常用接口

我們可以看到,默認的外邊距為0,為了美觀性我們可以設置下Margin。

  • setMargin(int)
  • setContentsMargins(int left, int top, int right, int bottom);
  • setContentsMargins(const QMargins &margins)?
    設置外邊距

setMargin可以設置左、上、右、下的外邊距,設置之后,他們的外邊距是相同的。?
setContentsMargins與其功能相同,但是可以將左、上、右、下的外邊距設置為不同的值。

這里我使用setMargin(10)將外邊距設置為10。

這里寫圖片描述


  • setSpacing(int)?
    設置間距

一般情況下,會有一個默認間距值,為了保持所有布局的統一性,或者你需要一個更合適的間距值,則需要手動設置。

這里我使用setSpacing(0)將間距設置為0。

這里寫圖片描述


  • addStretch()?
    添加了一個伸縮空間(QSpacerItem)。

居右

這里寫圖片描述

在第一個控件之前添加伸縮,這樣所有的控件就會居右顯示。

QHBoxLayout *pHLayout = new QHBoxLayout();
pHLayout->addStretch();  // 添加伸縮 pHLayout->addWidget(pButton1); pHLayout->addWidget(pButton2); pHLayout->addWidget(pButton3); pHLayout->addWidget(pButton4); pHLayout->addWidget(pButton5);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

居左

這里寫圖片描述

在最后一個控件之后添加伸縮,這樣所有的控件就會居左顯示。

QHBoxLayout *pHLayout = new QHBoxLayout();
pHLayout->addWidget(pButton1);
pHLayout->addWidget(pButton2); pHLayout->addWidget(pButton3); pHLayout->addWidget(pButton4); pHLayout->addWidget(pButton5); pHLayout->addStretch(); // 添加伸縮
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

居中

這里寫圖片描述

在第一個控件之前、最后一個控件之后添加伸縮,這樣所有的控件就會居中顯示。

QHBoxLayout *pHLayout = new QHBoxLayout();
pHLayout->addStretch();  // 第一個控件之前添加伸縮 pHLayout->addWidget(pButton1); pHLayout->addWidget(pButton2); pHLayout->addWidget(pButton3); pHLayout->addWidget(pButton4); pHLayout->addWidget(pButton5); pHLayout->addStretch(); // 最后一個控件之后添加伸縮 pHLayout->setSpacing(10);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

均分

這里寫圖片描述

在每一個控件之間都添加伸縮,這樣所有的控件之間的間距都會相同。

QHBoxLayout *pHLayout = new QHBoxLayout();
pHLayout->addStretch();
pHLayout->addWidget(pButton1); pHLayout->addStretch(); pHLayout->addWidget(pButton2); pHLayout->addStretch(); pHLayout->addWidget(pButton3); pHLayout->addStretch(); pHLayout->addWidget(pButton4); pHLayout->addStretch(); pHLayout->addWidget(pButton5); pHLayout->addStretch(); pHLayout->setSpacing(0);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

  • addWidget(QWidget *, int stretch = 0, Qt::Alignment alignment = 0)?
    添加控件

默認的,我們添加控件至水平布局中,默認都是垂直方向居中對齊的。

例如:

這里寫圖片描述

其中有控件大小不相同的時候就會看得很明顯了,如果我們需要將其中的某些控件居上、居下顯示,那么可以使用對齊方式Qt::Alignment。

下面,我們使用向上、向下對齊來設置其它控件。

這里寫圖片描述

QHBoxLayout *pHLayout = new QHBoxLayout();
pHLayout->addStretch();
// 水平居左 垂直居上 pHLayout->addWidget(pButton1, 0 , Qt::AlignLeft | Qt::AlignTop); pHLayout->addWidget(pButton2, 0 , Qt::AlignLeft | Qt::AlignTop); pHLayout->addWidget(pButton3); // 水平居左 垂直居下 pHLayout->addWidget(pButton4, 0 , Qt::AlignLeft | Qt::AlignBottom); pHLayout->addWidget(pButton5, 0 , Qt::AlignLeft | Qt::AlignBottom); pHLayout->setSpacing(10);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

  • setDirection(Direction)?
    設置布局方向

可以設置從左到右、從右到左、從上到下、從下到上等。。。

setDirection(QBoxLayout::RightToLeft)

這里寫圖片描述

setDirection(QBoxLayout::TopToBottom);

這里寫圖片描述

既然使用了QHBoxLayout,一般就不建議使用TopToBottom或者BottomToTop,如果實在確定不了方向,或者方向可以隨意變化,那么建議使用QBoxLayout。


  • setStretchFactor(QWidget *w, int stretch);
  • setStretchFactor(QLayout *l, int stretch);?
    設置控件、布局的拉伸系數

當窗體大小變化時,控件會根據拉伸系數來做相應的調整。

這里寫圖片描述

setStretchFactor(pButton1, 1);?
setStretchFactor(pButton2, 2);

設置pButton1的拉伸系數為1,pButton2拉伸系數為2,當窗體變大時,會優先將pButton2進行拉伸,當達到一定程度時,再拉伸pButton1,pButton1與pButton2的寬度比例為1:2。

總結

上面介紹了基本所有常用的接口使用,還有一些inset…接口,和它們功能相同,只不過是需要傳遞控件所在的索引index。常用的這些接口掌握了,其它布局QVBoxLayout、QGridLayout功能也相同或類似,一通百通

轉載于:https://www.cnblogs.com/lifan3a/articles/7795177.html

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

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

相關文章

Optaplanner終于支持多線程并行運行 - Multithreaded incremental solving

Optaplanner 7.9.0.Final之前,啟動引擎開始對一個Problem進行規劃的時候,只能是單線程進行的。也就是說,當引擎對每一個possible solution進行分數計算的過程中,細化到每個步驟(Caculation),都只能排隊在同一個線程中依…

python棋盤格_干貨必看 | Python的turtle庫之經典棋盤格

國際棋盤格是一個由9橫9縱的線組成的格子正方形,用Python的turtle庫進行繪制的時候,先做9橫9縱的線,再填上灰色小正方形,這就可以完成一個棋盤格了,下面是具體的操作步驟。(一)整體代碼1、import turtleimport turtle2…

一位技術老人給.NET初學者的一些建議

.NET平臺應用領域眾多,隨著這些年的不斷更新迭代,日趨臻善,也受到越來越多的開發者青睞。自從2000 年6 月22 日 微軟推出Microsoft.NET 戰略 ,至今已有22載,這些年新技術,新框架層出不窮,目不暇…

android 本地數據庫sqlite的封裝

單機android sqlite數據庫的實現,這個數據庫可與程序一起生成在安裝包中一、下載sqlite3.exe文件二、運行 cmd 轉到sqlite3.exe 所在目錄 運行 sqlite3.exe 數據庫名.db然后會出現sqlite>的命令提示符輸入創建表的語句, create table 表名&#xf…

ResourceManager中的Resource Estimator框架介紹與算法剖析

歡迎大家前往騰訊云社區,獲取更多騰訊海量技術實踐干貨哦~ 本文由宋超發表于云社區專欄 本文首先介紹了Hadoop中的ResourceManager中的estimator service的框架與運行流程,然后對其中用到的資源估算算法進行了原理剖析。 一. Resource Estimator Service…

幾十款 WPF 控件 - UI 庫,總有一款適合你

幾十款 WPF 控件 - UI 庫,總有一款適合你獨立觀察員 2022 年 10 月 16 日引言眾所周知,使用 WPF 框架能夠開發出功能強大、界面美觀的桌面端應用。能夠達到這個效果,各種 WPF 的控件庫、UI 庫功不可沒。所以,想著能不能收集一下目…

mysql將系統權限授予用戶_mysql創建用戶并授予權限

1、create schema [數據庫名稱] default character set utf8 collate utf8_general_ci;--創建數據庫采用create schema和create database創建數據庫的效果一樣。2、create user ‘[用戶名稱]‘‘%‘ identified by ‘[用戶密碼]‘;--創建用戶密碼8位以上,包括&#…

Android Studio導出jar包

Eclipse直接有個Export,可以直接導出jar包。AS相對Eclipse變化很大,編譯腳本變成了Gradle,各種導包操作都有差異。 下面是AS導出jar的過程: 第一步,修改app下的build.grade。 apply plugin: com.android.application修改為 apply …

GitHub Actions構建鏡像并部署服務

目的通過GitHub的Actions來(白嫖)部署.Net服務到阿里云服務器。環境準備需要一個阿里云服務器并且該服務器還安裝了docker環境,如果環境安裝不清楚可以查看之前的文章。創建鏡像倉庫在阿里云的容器鏡像服務中,創建一個鏡像倉庫用來存儲我們測試的鏡像&am…

20165232 緩沖區溢出漏洞實驗

緩沖區溢出漏洞實驗 實驗準備 實驗環境需要32位的Linux系統,需要下載安裝一些用于編譯 32 位 C 程序的軟件包,代碼如下: $ sudo apt-get update$ sudo apt-get install -y lib32z1 libc6-dev-i386$ sudo apt-get install -y lib32readline-gp…

使用qt的qtcore庫怎么包含_GitHub - coologic/QtCoreExamples: QtCore模塊相關類庫范例

QtCoreExamplesQtCore模塊相關類庫范例QJsonExampleQt進行Json文件讀寫范例QXmlExampleQt使用QXmlStreamReader/QXmlStreamWriter類進行XML文件讀寫范例非不是使用QtXML模塊QSharedMemoryExampleQt使用QSharedMemory實現共享內存QSettingsExample(Blog)Qt使用QSettings配置讀寫…

spfile

1 讓ORACLE自己主動從spfile啟動 SQL> create spfile/dev/vx/rdsk/vgora/lv_spfile from pfile; SQL> shutdown immediate; 改動initora11g.ora文件 /oracle/app/product/11g/db/dbs cp initora11g.ora initora11g.ora_bak echo SPFILE/dev/vx/rdsk/vgora/lv_spfil…

Atcoder 084D - Small Multiple(最短路徑+思維)

分析&#xff1a;這題腦洞新奇...居然是最短路...將0到k-1看做k個點&#xff0c;第t個點向(10*t0,1,2...,9)%k連一條長度為0,,1,2,..,9的邊&#xff0c;然后枚舉s1,2,...,9,算出所有從s到0的最短路&#xff0c;答案就是最短路s的最小值。 1 #include<iostream>2 #include…

Blazor學習之旅(5)數據綁定

【Blazor】| 總結/Edison Zhou大家好&#xff0c;我是Edison。最近在學習Blazor做全棧開發&#xff0c;因此根據老習慣&#xff0c;我會將我的學習過程記錄下來&#xff0c;一來體系化整理&#xff0c;二來作為筆記供將來翻看。本篇&#xff0c;我們來了解下在Blazor中數據是如…

chrome開啟touch屏幕點擊事件

2019獨角獸企業重金招聘Python工程師標準>>> 在chrome瀏覽器輸入 chrome://flags/#top-chrome-md 找到屬性 UI Layout for the browsers top chrome 選擇Hybrid&#xff0c;重啟chrome&#xff0c;如下圖&#xff1a; 轉載于:https://my.oschina.net/swingcoder/blo…

安卓如何更換wps黑金會員圖標_wps圖標(手機wps會員圖標黑色)

嘗試右鍵文件--打開方式--選擇默認程序,選擇wps程序,勾選始終以選擇的程序打開此文件,確定。如果還是不行的話,請嘗試做以下操作:點擊桌面左下角開始按鈕--在. 在WPS演示中,單擊“項目符號”,找到對應的那個即可。在WPS文字中,也是如此。 如題,如何做一個圖表,分別表…

Linux服務器重啟后crs_stat -t 命令無法正常使用以及解決思路

前提&#xff1a;在Linux系統中安裝ASM&#xff0c;安裝完ASM和Oracle數據庫時都是正常使用的&#xff0c;但在重啟服務器后Oracle相關命令不識別。1、[gridudevasm:/home/grid]$crsctl status res -t -bash: crsctl: command not found2、查看環境變量是否正常&#xff0c;命令…

英語十六個時態總結

下面用表格的形式給羅列出來&#xff0c;便于記憶 英語共有十六種時態&#xff0c;其表現形式如下(以study為例)&#xff1a; 一般時 進行時 完成時 完成進行時 現在 studystudies am studyingis studyingare studying have studiedhas studied have been studyinghas …

Python基礎--Python3基礎語法

Python3 基礎語法編碼默認情況下&#xff0c;Python3源碼文件以UTF-8編碼&#xff0c;所有字符串都是Unicode字符串。當然也可以為源碼文件指定不同的編碼&#xff0c;例如&#xff1a;# -*- coding: cp-1252 -*-標識符1.第一個字符必須是字母表中字母或下劃線&#xff1b;2.標…

3 Python os 文件和目錄

ile 對象使用 open 函數來創建&#xff0c;下表列出了 file 對象常用的函數&#xff1a; 序號方法及描述1 file.close() 關閉文件。關閉后文件不能再進行讀寫操作。 2 file.flush() 刷新文件內部緩沖&#xff0c;直接把內部緩沖區的數據立刻寫入文件, 而不是被動的等待輸出緩沖…