Qt佈局之QFormLayout

初識QFormLayout

之前已經瞭解過QBoxLayout(包括QHBoxLayout和QVBoxLayout)和QGridLayout。在測試上述佈局時使用了簡單的登錄框作為例子。我們發現輸入框前面都有個標籤用於說明其作用,每個標籤都是手動去new出來的,如果遇到需要很多輸入框的情況就會很麻煩,這時候使用QFormLayout的方式佈局就輕鬆多了。直接上栗子:

Qt佈局之QFormLayout

使用QFormLayout佈局省去了手動創建label的步驟,代碼變得清爽了許多。接下來好好了解一下QFormLayout吧。

QFormLayout可以看作是隻有兩列的QGridLayout,第一列是標籤域(label),第二列是字段域(field)。如例子中的“姓名”、“性別”、"年齡"是標籤域,nameEdit、sexCombo、ageSpin是字段域。QFormLayout通過addRow函數添加標籤域和字段域。也可以使用addWidget函數,該函數從QLayout類繼承,添加的部件會放在字段域。

移除佈局中的內容

QFormLayout移除部件使用 removeRow函數。removeRow有三個重載函數:

Qt佈局之QFormLayout

第一個是通過指定行的下標來移除指定的行,後兩個函數和addRow的重載是對應的,這也說明了QFormLayout不僅可以添加部件,也可以添加布局,也就是佈局的嵌套。

Qt佈局之QFormLayout

FieldGrowthPolicy

瞭解了QFormLayout的基本用法後,我覺得還有必要了解一下QFormLayout的一些屬性,首先就是FieldGrowthPolicy,它表示字段域的增長策略。有三個值可選:FieldsStayAtSizeHint、ExpandingFieldsGrow和AllNonFixedFieldsGrow。FieldsStayAtSizeHint表示字段域不超過其有效的sziehint。ExpandingFieldsGrow表示如果字段域的水平大小策略是Expanding或MinimumExpanding那麼它就會在填滿可用空間。AllNonFixedFieldsGrow表示字段域不是設置固定大小的話,它就會填滿可用空間。

FieldGrowthPolicy的默認值取決於應用程序使用的風格,如QMacStyle默認值FieldsStayAtSizeHint。QWindowsXPStyle默認值是AllNonFixedFieldsGrow。測試例子如下圖:

Qt佈局之QFormLayout

RowWrapPolicy

RowWrapPolicy用於指定一行中的字段域是否換行。有三個值可選:DontWrapRows、WrapLongRows、WrapAllRows。DontWrapRows表示不換行、WrapAllRows表示換行、WrapLongRows表示剩餘給字段域的空間不夠時換行。測試例子如下圖:

Qt佈局之QFormLayout


分享到:


相關文章: