Qt的5種常用佈局搭建
Qt佈局詳解:
介面開發首先要對整個介面進行佈局,使窗體上的所有的控制元件必須有一個合適的尺寸和位置。那麼做出來的介面才看起來美觀。
那麼如何對介面進行佈局呢?Qt提供了一些類負責排列窗體上的控制元件,主要有:QHBoxLayout,QVBoxLayout,QGridLayout,QFormLayout,QStackLayout。(佈局管理類)這些類簡單易用,無論在程式碼中還是用Qt Designer開發程式都能用到。
常用的佈局方法:
(1)使用水平佈局類QHBoxLayout;
(2)使用垂直佈局類QVBoxLayout;
(3)使用網格佈局類QGridLayout;
(4)使用表格佈局類QFormLayout;
(5)使用分組佈局類QStackLayout( QStackedLayout類把子控制元件進行分組或者分頁,一次只顯示一組或者一頁,隱藏其他組或者頁上的控制元件)。
這些方法可以巢狀使用。使用這些Qt佈局管理類的另一個原因是,在程式、系統改變字型,語言或者在不同的平臺上執行時,佈局管理器能夠自動調整窗體裡所有控制元件的大小和尺寸。
佈局管理的三種方式:
Qt中有三種方式對窗體上的控制元件進行佈局管理:
1.絕對位置定位(absolute positioning):控制元件佈局是固定位置,沒有自適應功能。
例子如下:
QWidget *pWidget = new QWidget;
QLabel label(pWidget);
label.setText(QObject::tr("姓名:"));
label.setGeometry(10,10,20,20);
QLineEdit namedLineEdit("小王",pWidget);
namedLineEdit.setGeometry(35,10,50,20);
QPushButton *btn = new QPushButton(QObject::tr("關閉"),pWidget);
btn->setGeometry(90,10,40,20);
2.手工佈局(manual layout):給出控制元件的絕對位置,但是他們的尺寸根據視窗的大小確定,可以通過重寫窗體控制元件的resizeEvent()實現對子控制元件的大小設定。
3.佈局管理器(layout managers):運用QHBoxLayout、QVBoxLayout、QGridLayout 、QFormLayout、QStackLayout佈局。
(1).Horizontal Layout佈局設定(水平佈局):他包含的物件都橫向排列開,示例如圖3-1所示:
圖 3-1 水平佈局
(2).Vertical Layout佈局設定(垂直佈局):他包含的物件都縱向排列開,示例如圖3-2所示:
圖3-2 豎直佈局
(3).Grid Layout佈局設定(網格佈局):將控制元件放置到網格中佈局,它本身會從父視窗或父佈局中佔據儘可能多的介面空間,然後把自己的空間劃分為行和列,再把每個控制元件塞到設定好的一個或多個單元格中。通常情況下 QGridLayout不需要自己新增空白條 QSpacerItem,因為其他功能控制元件把各自的單元格佔據之後,剩下沒控制元件佔據的單元格自然就是空的,空的格子預設裡面什麼都沒有,也沒有空白條。示例如圖3-3所示:
圖3-3 網格佈局
(4).Form Layout佈局設定(表格佈局):專門用於管理輸入控制元件和與之相關的標籤等表單佈局,QFormLayout固定為兩列布局,並針對表單做了建模,配套了一堆方便使用的函式。網格佈局器的基本單元是單元格,而表單佈局器的基本單元是行。表單佈局器是高度建模並封裝的,它沒有 addWidget()和 addLayout()之類的函式,它只有addRow()函式。表單佈局器中一行的空間可以由多個控制元件佔據,也可以由一個控制元件佔據。示例如圖3-4所示:
圖3-4 表格佈局
(5).佈局管理器在指定的位置留出一塊空間:(Qt Designer中,可以加入一個spacer實現這一功能)示例如圖3-5所示:
圖3-5 佈局留出指定空間
(6).QSpliter分割器的作用:分裂器 QSplitter 是一個實體功能控制元件,它的基類是 QFrame,QFrame 基類正是 QWidget。QSplitter 可以獨立存在,可以作為父視窗容納多個子控制元件,分裂器會完全擁有內部的子控制元件。在 Qt 設計師或 QtCreator 設計模式左邊 Widget Box 裡面沒有分裂器可以拖動,使用分裂器的方式是:選中已有的控制元件,然後點選上面工具欄的水平分裂器或垂直分裂器按鈕。比如上圖是將三個豐富文字編輯器作為一個水平分裂器排布 的。分裂器內每個控制元件都有一個手柄 Handle,水平分裂器內控制元件的手柄在左邊,垂直分裂器內控制元件的手柄在控制元件上方。第 0 個控制元件的手柄是永久隱藏的,分裂器自身佔據的大矩形四個邊界線通常不能拖動拉大,只能拖動控制元件之間的手柄,比如上圖的手柄 1 和 手柄 2 。分裂器整體的尺寸不是使用者控制的,而在分裂器內部的控制元件尺寸可以讓使用者手工拖動手柄來控制。在程式執行時,水平分裂器內各個控制元件的寬度、垂直分裂器內部各個控制元件的高度, 一般都是使用者拖動手柄控制,這是分裂器和佈局器最大的不同。
具體操作如下圖3-6所示:
圖 3-6
實際效果如下圖3-7所示:
圖 3-7分割實際效果圖
sizepolicy:
1. Fixed: 大小不能改變
設定部件大小
只要是繼承自QWidget的類都有以下兩個屬性:
大小提示:siziHint()
儲存部件的建議大小資訊 ->通過函式可獲取
最小大小提示:minimumSizeHint()
儲存部件的建議最小大小資訊 ->通過函式可獲取
sizePolicy屬性:
常量 | 描述 |
---|---|
QSizePolicy::Fixed | 只能使用sizeHint()提供的值,無法伸縮 |
QSizePolicy::Minimum | siziHint()提供的大小是最小的,部件可以被拉伸 |
QSizePolicy::Maximum | sizeHint()提供的是最大大小,部件可以被壓縮 |
QSizePolicy::Preferred | sizeHint()提供的大小是最佳大小,可以拉伸可以壓縮 |
QSizePolicy::Expanding | sizeHint()提供的是合適的大小,部件可以被壓縮,不過更傾向於拉伸來獲得更多的空間 |
QSizePolicy::MinimumExpanding | sizeHint()提供的大小是最小的,部件傾向於被拉伸來獲取更多的空間 |
QSizePolicy::Ignored | sizeHint()的值被忽略,部件將盡可能的被拉伸來獲取更多的空間 |
關於伸縮因子(stretch factor)的概念:在程式碼中,可以在使用佈局管理器的addWidget()函式新增部件時,在第二個引數指定伸縮因子。2,1
QLayout
屬性 | 說明 |
---|---|
layoutName | 現在所使用的佈局管理器的名稱 |
layoutLeftMargin | 設定佈局管理器到介面左邊界的距離 |
layoutTopMargin | 設定佈局管理器到介面上邊界的距離 |
layoutRightMargin | 右邊界 |
layoutBottomMargin | 下邊界 |
layoutSpacing | 佈局管理器各個子部件間的距離 |
layoutStretch | 伸縮因子 |
layoutSizeConstraint | 設定大小約束條件 |
相關文章
- 5 種常用佈局的 flex 實現Flex
- GO QT5 水平垂直佈局GoQT
- qt 佈局---表單佈局QT
- CSS 5種佈局方案CSS
- css佈局-實現左中右佈局的5種方式CSS
- Qt中的佈局淺析與彈簧的使用,以及Qt居中的兩種方法QT
- CSS三欄佈局的5種方法詳解CSS
- Flutter 常用佈局Flutter
- CSS常用佈局CSS
- 一個常用的佈局
- QT Creator/QT Designer佈局自適應QT
- 淺析 Qt 佈局系統QT
- Qt 佈局管理 - 停靠視窗QT
- 網頁佈局------幾種佈局方式網頁
- 常用兩欄佈局和三欄佈局
- 佈局的常用解決方案
- QT佈局之控制元件空隙QT控制元件
- 不懂聖盃佈局?5種方式包教包會
- iOS UICollectionViewCell的一種佈局iOSUIView
- Grid 佈局-子項補充及常用佈局
- 常用佈局管理器
- CSS系列之常用佈局CSS
- 常用的多列等高佈局收藏
- html5佈局HTML
- Qt5 中常用的模組列表:QT
- css網頁的幾種佈局CSS網頁
- 幾種常見的CSS佈局CSS
- 前端常見的十種佈局前端
- ListView項(Item)的三種佈局View
- CSS佈局-各種居中CSS
- CSS多種佈局方式自我實現-水平佈局(二)CSS
- 快速利用RecyclerView的LayoutManager搭建流式佈局View
- CSS三欄佈局的四種方法CSS
- 三欄佈局的n種實現
- css各種佈局總結CSS
- android:四種基本佈局Android
- Android開發之常用佈局Android
- 快速建站中常用佈局都有哪些?