1. 程式人生 > 其它 >QT的QFormLayout類的使用

QT的QFormLayout類的使用

詳細說明
QFormLayout類管理輸入視窗小部件及其相關標籤的形式。

QFormLayout是一個便捷的佈局類,以兩列的形式佈局其子級。左列包含標籤,右列包含“欄位”視窗小部件(線編輯器,旋轉框等)。
傳統上,這種兩列表單佈局是使用QGridLayout實現的。 QFormLayout是更高級別的替代方案,具有以下優點:
遵守不同平臺的外觀和感覺準則。
例如,macOS Aqua和KDE準則指定標籤應右對齊,而Windows和GNOME應用程式通常使用左對齊。
支援包裝長行。
對於具有小顯示器的裝置,可以將QFormLayout設定為包裝長行,甚至包裝所有行。
用於建立標籤-欄位對的便捷API。

使用QString和QWidget *的addRow()過載在後臺建立QLabel並自動設定其好友。然後我們可以編寫如下程式碼:

  QFormLayout *formLayout = new QFormLayout;
  formLayout->addRow(tr("&Name:"), nameLineEdit);
  formLayout->addRow(tr("&Email:"), emailLineEdit);
  formLayout->addRow(tr("&Age:"), ageSpinBox);
  setLayout(formLayout);

將其與以下使用QGridLayout編寫的程式碼進行比較:

nameLabel = new QLabel(tr("&Name:"));
  nameLabel->setBuddy(nameLineEdit);

  emailLabel = new QLabel(tr("&Name:"));
  emailLabel->setBuddy(emailLineEdit);

  ageLabel = new QLabel(tr("&Name:"));
  ageLabel->setBuddy(ageSpinBox);

  QGridLayout *gridLayout = new QGridLayout;
  gridLayout->addWidget(nameLabel, 0, 0);
  gridLayout->addWidget(nameLineEdit, 0, 1);
  gridLayout->addWidget(emailLabel, 1, 0);
  gridLayout->addWidget(emailLineEdit, 1, 1);
  gridLayout->addWidget(ageLabel, 2, 0);
  gridLayout->addWidget(ageSpinBox, 2, 1);
  setLayout(gridLayout);

下表顯示了不同樣式的預設外觀。
在這裡插入圖片描述
還可以通過呼叫setLabelAlignment(),setFormAlignment(),setFieldGrowthPolicy()和setRowWrapPolicy()來分別覆蓋表單樣式。 例如,要模擬QMacStyle在所有平臺上但具有左對齊標籤的表單佈局外觀,可以編寫:

  formLayout->setRowWrapPolicy(QFormLayout::DontWrapRows);
  formLayout->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
  formLayout->setFormAlignment(Qt::AlignHCenter | Qt::AlignTop);
  formLayout->setLabelAlignment(Qt::AlignLeft);