QML: CheckBox and RadioButton with description field
Restarting from this post explaining how to add the word wrap feature to the CheckBox and RadioButton controls here will propose to add a description field under the main control text. This will be useful to give a short explanation concerning the use of the control itself.
Full example code can be found here
In the example project you can find two ready made QML object to use in your project. The object basically add an additional property named description as follow:
DescriptionRadioButton {
text: "This is the radio button"
description: "This is the very very very very very very very very very very very very long description"
}
DescriptionCheckBox {
text: "This is the check box"
description: "This is the very very very very very very very very very very very very long description"
}
Objects code is quite simple. Basically it creame a custom control content item composed by two Labels. The first is the main thext and the second is the description field. The contro indicator is repositioned based to the main text size.
RadioButton {
id: descriptionRadioButton
width: parent.width
indicator.y: topPadding + (textLabel.height / 2) - (descriptionRadioButton.indicator.height / 2)
property string description
contentItem: Column {
readonly property int sideOffset: descriptionRadioButton.indicator.width + descriptionRadioButton.spacing
spacing: 15
Label {
id: textLabel
width: parent.width - leftPadding
text: descriptionRadioButton.text
font: descriptionRadioButton.font
horizontalAlignment: Label.AlignLeft
verticalAlignment: Label.AlignTop
leftPadding: parent.sideOffset
wrapMode: Label.Wrap
}
Label {
id: descriptionLabel
text: description
color: "gray"
visible: text.length > 0
width: parent.width - leftPadding
font: descriptionRadioButton.font
horizontalAlignment: Label.AlignLeft
verticalAlignment: Label.AlignTop
leftPadding: parent.sideOffset
wrapMode: Label.Wrap
}
}
}
CheckBox {
id: descriptionCheckBox
width: parent.width
indicator.y: topPadding + (textLabel.height / 2) - (descriptionCheckBox.indicator.height / 2)
property string description
contentItem: Column {
readonly property int sideOffset: descriptionCheckBox.indicator.width + descriptionCheckBox.spacing
spacing: 15
Label {
id: textLabel
width: parent.width - leftPadding
text: descriptionCheckBox.text
font: descriptionCheckBox.font
horizontalAlignment: Label.AlignLeft
verticalAlignment: Label.AlignTop
leftPadding: parent.sideOffset
wrapMode: Label.Wrap
}
Label {
id: descriptionLabel
text: description
color: "gray"
visible: text.length > 0
width: parent.width - leftPadding
font: descriptionCheckBox.font
horizontalAlignment: Label.AlignLeft
verticalAlignment: Label.AlignTop
leftPadding: parent.sideOffset
wrapMode: Label.Wrap
}
}
}
Comments
Post a Comment