あなたは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と同じ)、もっと良いと思う。私はちょうど最も標準的な方法を使いたいと思っていました。 –