目錄
一、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);