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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Qt之表单布局(QFormLayout)

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


簡述

QFormLayout管理輸入型控件和關聯的標簽組成的那些Form表單。

QFormLayout是一個方便的布局類,其中的控件以兩列的形式被布局在表單中。左列包括標簽,右列包含輸入控件,例如:QLineEdit、QSpinBox等。

  • 簡述
  • 使用
  • 常用接口
  • 總結

使用

我們可以通過addRow(const QString &labelText, QWidget *field)來創建一個帶有給定文本的QLabel及QWidget控件行,它們可以自動的設置為伙伴關系。

QFormLayout *pLayout = new QFormLayout(); pLayout->addRow(QStringLiteral("用戶名:"), pUserLineEdit); pLayout->addRow(QStringLiteral("密碼:"), pPasswordLineEdit); pLayout->addRow(QStringLiteral("驗證碼:"), pVerifyLineEdit); pLayout->setSpacing(10); pLayout->setMargin(10); setLayout(pLayout);

使用QGridLayout格柵布局編寫的比較:

QLabel *pUserNameLabel = new QLabel(this); QLabel *pPasswordLabel = new QLabel(this); QLabel *pVerifyLabel = new QLabel(this);pUserNameLabel->setText(QStringLiteral("用戶名:")); pPasswordLabel->setText(QStringLiteral("密碼:")); pVerifyLabel->setText(QStringLiteral("驗證碼:"));QGridLayout *pLayout = new QGridLayout(); pLayout->addWidget(pUserNameLabel, 0, 0); pLayout->addWidget(pUserLineEdit, 0, 1); pLayout->addWidget(pPasswordLabel, 1, 0); pLayout->addWidget(pPasswordLineEdit, 1, 1); pLayout->addWidget(pVerifyLabel, 2, 0); pLayout->addWidget(pVerifyLineEdit, 2, 1); pLayout->setSpacing(10); pLayout->setMargin(10); setLayout(pLayout);

很顯然,功能可以實現,但是代碼量大了很多。

常用接口

  • setRowWrapPolicy(RowWrapPolicy policy)

    設置換行策略

QFormLayout::RowWrapPolicy枚舉:

控制表單行的顯示策略。

內容值描述效果
QFormLayout::DontWrapRows0輸入框始終在標簽旁邊
QFormLayout::WrapLongRows1標簽有足夠的空間適應,如果最小大小比可用空間大,輸入框會被換到下一行
QFormLayout::WrapAllRows2輸入框始終在標簽下邊

  • setWidget(int row, ItemRole role, QWidget *widget)

    設置行row所對應的控件,如果role為LabelRole時,設置的為標簽所對應的控件,如果role為FieldRole時,設置的為輸入框所對應的控件。

QFormLayout::ItemRole枚舉:

指定一排控件的類型

內容值描述
QFormLayout::LabelRole0標簽
QFormLayout::FieldRole1輸入框
QFormLayout::SpanningRole2跨越標簽和輸入框的控件

例如:

//pLayout->addRow(pUserNameLabel, pUserLineEdit); pLayout->setWidget(0, QFormLayout::LabelRole, pUserNameLabel); pLayout->setWidget(0, QFormLayout::FieldRole, pUserLineEdit);
  • setSpacing(int spacing)
  • setHorizontalSpacing(int spacing)
  • setVerticalSpacing(int spacing)

    設置間距(水平間距、垂直間距)


  • QWidget * QFormLayout::labelForField(QWidget * field)

    通過field獲取field對應的標簽,這里不一定是QLabel,返回值為QWidget。

總結

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

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

總結

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

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