日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt之格栅布局(QGridLayout)

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt之格栅布局(QGridLayout) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


簡述

QGridLayout:格柵布局,也被稱作網格布局(多行多列)。

柵格布局將位于其中的窗口部件放入一個網狀的柵格之中。QGridLayout需要將提供給它的空間劃分成的行和列,并把每個窗口部件插入并管理到正確的單元格。 柵格布局是這樣工作的:

它計算了位于其中的空間,然后將它們合理的劃分成若干個行(row)和列(column),并把每個由它管理的窗口部件放置在合適的單元之中,這里所指的單元(cell)即是指由行和列交叉所劃分出來的空間。

在柵格布局中,行和列本質上是相同的,只是叫法不同而已。下面將重點討論列,這些內容當然也適用于行。

在柵格布局中,每個列(以及行)都有一個最小寬度(使用setColumnMinimumWidth()設置)以及一個伸縮因子(使用setColumnStretch()設置)。最小寬度指的是位于該列中的窗口部件的最小的寬度,而伸縮因子決定了該列內的窗口部件能夠獲得多少空間。

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

詳細描述

一般情況下我們都是把某個窗口部件放進柵格布局的一個單元中,但窗口部件有時也可能會需要占用多個單元。這時就需要用到addWidget()方法的一個重載版本,原型如下:

  • void addWidget(QWidget *, int row, int column, int rowSpan, int columnSpan, Qt::Alignment = 0);

這個單元將從row和column開始,擴展到rowSpan和columnSpan指定的倍數的行和列。如果rowSpan或columnSpan的值為-1,則窗口部件將擴展到布局的底部或者右邊邊緣處。

在創建柵格布局完成后,就可以使用addWidget(),addItem(),以及addLayout()方法向其中加入窗口部件,以及其它的布局。

使用

下面我們以企鵝為例,來講解如何使用QGridLayout。

效果

源碼

// 構建控件 頭像、用戶名、密碼輸入框等 QLabel *pImageLabel = new QLabel(this); QLineEdit *pUserLineEdit = new QLineEdit(this); QLineEdit *pPasswordLineEdit = new QLineEdit(this); QCheckBox *pRememberCheckBox = new QCheckBox(this); QCheckBox *pAutoLoginCheckBox = new QCheckBox(this); QPushButton *pLoginButton = new QPushButton(this); QPushButton *pRegisterButton = new QPushButton(this); QPushButton *pForgotButton = new QPushButton(this);pLoginButton->setFixedHeight(30); pUserLineEdit->setFixedWidth(200);// 設置頭像 QPixmap pixmap(":/Images/logo"); pImageLabel->setFixedSize(90, 90); pImageLabel->setPixmap(pixmap); pImageLabel->setScaledContents(true);// 設置文本 pUserLineEdit->setPlaceholderText(QStringLiteral("QQ號碼/手機/郵箱")); pPasswordLineEdit->setPlaceholderText(QStringLiteral("密碼")); pPasswordLineEdit->setEchoMode(QLineEdit::Password); pRememberCheckBox->setText(QStringLiteral("記住密碼")); pAutoLoginCheckBox->setText(QStringLiteral("自動登錄")); pLoginButton->setText(QStringLiteral("登錄")); pRegisterButton->setText(QStringLiteral("注冊賬號")); pForgotButton->setText(QStringLiteral("找回密碼"));QGridLayout *pLayout = new QGridLayout(); // 頭像 第0行,第0列開始,占3行1列 pLayout->addWidget(pImageLabel, 0, 0, 3, 1); // 用戶名輸入框 第0行,第1列開始,占1行2列 pLayout->addWidget(pUserLineEdit, 0, 1, 1, 2); pLayout->addWidget(pRegisterButton, 0, 4); // 密碼輸入框 第1行,第1列開始,占1行2列 pLayout->addWidget(pPasswordLineEdit, 1, 1, 1, 2); pLayout->addWidget(pForgotButton, 1, 4); // 記住密碼 第2行,第1列開始,占1行1列 水平居左 垂直居中 pLayout->addWidget(pRememberCheckBox, 2, 1, 1, 1, Qt::AlignLeft | Qt::AlignVCenter); // 自動登錄 第2行,第2列開始,占1行1列 水平居右 垂直居中 pLayout->addWidget(pAutoLoginCheckBox, 2, 2, 1, 1, Qt::AlignRight | Qt::AlignVCenter); // 登錄按鈕 第3行,第1列開始,占1行2列 pLayout->addWidget(pLoginButton, 3, 1, 1, 2); // 設置水平間距 pLayout->setHorizontalSpacing(10); // 設置垂直間距 pLayout->setVerticalSpacing(10); // 設置外間距 pLayout->setContentsMargins(10, 10, 10, 10); setLayout(pLayout);

常用接口

  • addWidget(QWidget *, int row, int column, Qt::Alignment = 0)
  • addWidget(QWidget *, int row, int column, int rowSpan, int columnSpan, Qt::Alignment = 0)
    添加窗口部件至布局。

這個單元將從row和column開始,擴展到rowSpan和columnSpan指定的倍數的行和列。如果rowSpan或columnSpan的值為-1,則窗口部件將擴展到布局的底部或者右邊邊緣處,Qt::Alignment為對齊方式。

-addLayout(QLayout *, int row, int column, Qt::Alignment = 0)
-addLayout(QLayout *, int row, int column, int rowSpan, int columnSpan, Qt::Alignment = 0)

和addWidget類似,這個是添加布局。


  • setRowStretch(int row, int stretch)
  • setColumnStretch(int column, int stretch)
    設置行/列的伸縮空間

和QBoxLayout的addStretch功能類似。


  • setSpacing(int spacing)
  • setHorizontalSpacing(int spacing)
  • setVerticalSpacing(int spacing)
    設置間距

setSpacing()可以同時設置水平、垂直間距,設置之后,水平、垂直間距相同。
setHorizontalSpacing()、setVerticalSpacing()可以分別設置水平間距、垂直間距。


  • setRowMinimumHeight(int row, int minSize)
    設置行最小高度

  • setColumnMinimumWidth(int column, int minSize)
    設置列最小寬度


  • columnCount()
    獲取列數

  • rowCount()
    獲取行數


  • setOriginCorner(Qt::Corner)
    設置原始方向

    和QBoxLayout的setDirection功能類似。

總結

當界面元素較為復雜時,應毫不猶豫的盡量使用柵格布局,而不是使用水平和垂直布局的組合或者嵌套的形式,因為在多數情況下,后者往往會使“局勢”更加復雜而難以控制。柵格布局賦予了界面設計器更大的自由度來排列組合界面元素,而僅僅帶來了微小的復雜度開銷。

當要設計的界面是一種類似于兩列和若干行組成的形式時,使用表單布局要比柵格布局更為方便些。

總結

以上是生活随笔為你收集整理的Qt之格栅布局(QGridLayout)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。