QT的佈局管理系統提供簡單而強大的機制自動排列一個窗口中的部件、全部QWidget類子類的實例均可以使用佈局管理器來管理位於其中的子部件,QWidget::setLayouyt()
函數能夠在一個部件上應用佈局管理器。一個部件應用佈局管理器後會完成如下任務:c++
定位子部件ide
感知窗口默認大小函數
感知窗口最大最小佈局
改變大小處理字體
當內容改變時自動更新ui
屬性 | 說明 |
---|---|
layoutName | 如今所使用的佈局管理器的名稱 |
layoutLeftMargin | 設置佈局管理器到界面左邊界的距離 |
layoutTopMargin | 設置佈局管理器到界面上邊界的距離 |
layoutRightMargin | 右邊界 |
layoutBottomMargin | 下邊界 |
layoutSpacing | 佈局管理器各個子部件間的距離 |
layoutStretch | 伸縮因子 |
layoutSizeConstraint | 設置大小約束條件 |
基本佈局管理器使子佈局在水平方向或垂直方向排成一列,將全部空間分紅一行盒子,而後將每一個部件放入一個盒子中。this
柵格佈局管理器將空間分隔成行和列,行和列的交叉處造成單元格,而後將部件放入肯定的單元格中。code
#include <QGridLayout> QGridLayout * layout = new QGridLayout; layout->addWidget(Btn, 0, 0, 1, 2); //添加部件,從第1行第1列開始,佔據1行2列 QPushButton *pButton = new QPushButton(this); QLabel *pFirstPage= new QLabel(this); QLabel *pSecondPage = new QLabel(this); QLabel *pThirdPage = new QLabel(this); m_pStackedLayout = new QStackedLayout(); pButton->setText(QStringLiteral("點擊切換")); pFirstPage->setText(QStringLiteral("一去丶二三裏")); pSecondPage->setText(QStringLiteral("青春不老,奮鬥不止!")); pThirdPage->setText(QStringLiteral("純正開源之美,有趣、好玩、靠譜。。。")); // 添加頁面(用於切換) m_pStackedLayout->addWidget(pFirstPage); m_pStackedLayout->addWidget(pSecondPage); m_pStackedLayout->addWidget(pThirdPage); QVBoxLayout *pLayout = new QVBoxLayout(); pLayout->addWidget(pButton, 0, Qt::AlignLeft | Qt::AlignVCenter); pLayout->addLayout(m_pStackedLayout); pLayout->setSpacing(10); pLayout->setContentsMargins(10, 10, 10, 10); setLayout(pLayout); // 鏈接切換按鈕信號與槽 connect(pButton, &QPushButton::clicked, this, &MainWindow::switchPage); // 切換頁面 void MainWindow::switchPage() { int nCount = m_pStackedLayout->count(); int nIndex = m_pStackedLayout->currentIndex(); // 獲取下一個須要顯示的頁面索引 ++nIndex; // 當須要顯示的頁面索引大於等於總頁面時,切換至首頁 if (nIndex >= nCount) nIndex = 0; m_pStackedLayout->setCurrentIndex(nIndex); }
用來管理表格的輸入部件及相關的標籤,將它的子部件分爲兩列,左邊是一些標籤,右邊是一些輸入部件。orm
參考addRow()
繼承
addLayout()
將一個子佈局管理器放入主佈局。
只要是繼承自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
5個常量,相似於sizePolicy屬性,在文檔中查詢使用。建議QLayout::SetNoConstraint 部件不被約束
一個窗口可能不少選項是擴充的,只在必要的時候顯示出來,這是就可使用一個按鈕,用來隱藏或顯示多餘的內容。要實現可擴展窗口,就得使用佈局管理的特徵,當子部件隱藏時,佈局管理器自動縮小,當子部件從新顯示時,佈局管理器再次放大。
void MyWidget::on_pushButton_toggled(bool checked) { ui -> textEdit -> setVisible(checked); //按完按鈕顯示 } ui -> textEdit -> hide(); //隱藏