Reputation: 884
I want to style GroupBox as below in QML 2 :
I am not finding How to do this in QML 2. In the following page, Customizing Qt Quick controls there is no information on Styling Title.
Upvotes: 2
Views: 6245
Reputation: 1796
You can use label.x to set it in the middle
GroupBox {
title: "Potato"
label.x: width/2 - label.contentWidth/2
Label {
text: "Wubba lubba dub dub."
}
}
Upvotes: 2
Reputation: 49
Try this:
GroupBox{
id: id_keyListBox
label: Label{
text: "Choose an account to see details"
color: "blue"
}
Upvotes: -1
Reputation: 2388
you could do something like this:
GroupBox {
id: control
title: qsTr("GroupBox")
anchors.centerIn: parent
width: 300
height: 150
background: Rectangle {
y: control.topPadding - control.padding
width: parent.width
height: parent.height - control.topPadding + control.padding
color: "transparent"
border.color: "#21be2b"
radius: 2
}
label: Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.top
anchors.bottomMargin: -height/2
color: "white" //set this to the background color
width: parent.width * 0.7
height: title.font.pixelSize
Text {
id: title
text: qsTr("My Tilte")
anchors.centerIn: parent
font.pixelSize: 32
}
}
}
The more complicated solution if you want your label to be transparent is to use a Canvas to draw the background Rectangle:
CustomBox.qml
import QtQuick 2.7
Item {
id: box
property string borderColor: "black"
property int borderWidth: 1
onWidthChanged: canvas.requestPaint()
onHeightChanged: canvas.requestPaint()
Canvas {
id: canvas
anchors.fill: parent
antialiasing: true
onPaint: {
var ctx = canvas.getContext('2d')
ctx.strokeStyle = box.borderColor
ctx.lineWidth = box.borderWidth
ctx.beginPath()
ctx.moveTo(width*0.15, 0)
ctx.lineTo(0, 0)
ctx.lineTo(0, height)
ctx.lineTo(width, height)
ctx.lineTo(width, 0)
ctx.lineTo(width - width * 0.15, 0)
ctx.stroke()
}
}
}
You can then use it like this:
GroupBox {
id: control
title: qsTr("GroupBox")
anchors.centerIn: parent
width: 300
height: 150
background: CustomBox {
y: control.topPadding - control.padding
width: parent.width
height: parent.height - control.topPadding + control.padding
borderColor: "black"
borderWidth: 1
}
label: Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.top
anchors.bottomMargin: -height/2
color: "transparent"
width: parent.width * 0.7
height: title.font.pixelSize
Text {
id: title
text: qsTr("Settings")
anchors.centerIn: parent
font.pixelSize: 32
}
}
}
Upvotes: 5