QT佈局管理

QT佈局管理

QT的佈局管理系統提供簡單而強大的機制自動排列一個窗口中的部件、全部QWidget類子類的實例均可以使用佈局管理器來管理位於其中的子部件,QWidget::setLayouyt()函數能夠在一個部件上應用佈局管理器。一個部件應用佈局管理器後會完成如下任務:c++

  1. 定位子部件ide

  2. 感知窗口默認大小函數

  3. 感知窗口最大最小佈局

  4. 改變大小處理字體

  5. 當內容改變時自動更新ui

    1. 字體大小,文本或子部件的其餘內容隨之改變
    2. 隱藏或顯示子部件
    3. 移除一個子部件

QLayout

屬性 說明
layoutName 如今所使用的佈局管理器的名稱
layoutLeftMargin 設置佈局管理器到界面左邊界的距離
layoutTopMargin 設置佈局管理器到界面上邊界的距離
layoutRightMargin 右邊界
layoutBottomMargin 下邊界
layoutSpacing 佈局管理器各個子部件間的距離
layoutStretch 伸縮因子
layoutSizeConstraint 設置大小約束條件

QBoxLayout、基本佈局管理器

基本佈局管理器使子佈局在水平方向或垂直方向排成一列,將全部空間分紅一行盒子,而後將每一個部件放入一個盒子中。this

QHBoxLayout、水平佈局管理器

QVBoxLayout、垂直佈局管理器

QGridLayout、柵格佈局管理器

柵格佈局管理器將空間分隔成行和列,行和列的交叉處造成單元格,而後將部件放入肯定的單元格中。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);
}

QFormLayout、表單佈局管理器

用來管理表格的輸入部件及相關的標籤,將它的子部件分爲兩列,左邊是一些標籤,右邊是一些輸入部件。orm

參考addRow()繼承

QStackedLayout、棧佈局管理器

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

約束頂層窗口大小、LayoutSizeConstraint

5個常量,相似於sizePolicy屬性,在文檔中查詢使用。建議QLayout::SetNoConstraint 部件不被約束

可擴展窗口

一個窗口可能不少選項是擴充的,只在必要的時候顯示出來,這是就可使用一個按鈕,用來隱藏或顯示多餘的內容。要實現可擴展窗口,就得使用佈局管理的特徵,當子部件隱藏時,佈局管理器自動縮小,當子部件從新顯示時,佈局管理器再次放大。

void MyWidget::on_pushButton_toggled(bool checked)
{
    ui -> textEdit -> setVisible(checked);  //按完按鈕顯示
}  
ui -> textEdit -> hide(); //隱藏
相關文章
相關標籤/搜索