如果你滿意的GridLayout
,唯一缺少的自動標籤生成,你可以創建自己的一些小的輔助類,在其中封裝Label
並保持該控件的屬性。
// FormControl.qml
import QtQuick 2.0
import QtQuick.Controls 2.0
Item {
id: root
property alias label: myLabel
Label {
id: myLabel
parent: root.parent
Layout.fillHeight: true
Layout.fillWidth: true
verticalAlignment: Qt.AlignVCenter
MouseArea {
anchors.fill: parent
onClicked: root.control.forceActiveFocus()
}
}
property Item control
Row {
id: content
parent: myLabel.parent // parent it to myLabel.parent, to make sure, that one is added first.
children: [control]
}
}
的用法很簡單:
import QtQuick 2.7
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.0
ApplicationWindow {
id: myWindow
visible: true
width: 600
height: 600
color: 'white'
GridLayout {
columns: 2
FormControl {
label.text: 'test1'
control: ComboBox {
model: ['hello', 'world', 'and', 'bye']
}
}
FormControl {
label.text: 'Text'
control: TextField {
}
}
FormControl {
label.text: 'Something Long'
control: TextField {
}
}
}
}
,當你在FormControl.qml
聲明它的default property Item control
你可能會忽略control
。然後,然而你可能會無意中添加多個控件,其中第一個將會丟失。
我使用受益於隱含的高度和寬度,但您也可以使用Item
並將寬度和高度設置爲childrenRect.width/height
。不過,我不確定這是否穩健。
由於我對'QFormLayout'不熟悉,請您解釋一下,您正在嘗試做什麼以及您計劃如何使用它? – derM
我試圖實現一個非常簡單的對話框與多個輸入字段。每個輸入字段都應該有自己的標籤。如果用戶不小心點擊標籤而不是輸入項目,我希望輸入項目被聚焦(好友功能)。我認爲這會更好如果我不需要自己創建標籤並讓FormLayout執行此操作(與QtWidgets中的相同)。我只是想用最規範的方式。 –