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