#qt #qml
#qt #qml
Вопрос:
Я создаю пользовательский GroupBox в QML, и в настоящее время у меня есть это
Rectangle
{
anchors.fill: parent
color: "#55aaff"
Rectangle
{
id: combo_box
anchors.centerIn: parent
color: "transparent"
width: parent.width/2
height: parent.height/2
opacity: 0.3
Rectangle
{
anchors.fill: parent
color: "transparent"
border.color: "#ffffff"
border.width: 1
radius: 20
}
}
Rectangle
{
id: combo_box_title
anchors.verticalCenter: combo_box.top
anchors.left: combo_box.left
anchors.leftMargin: 30
width: 90
height: 20
opacity: 0.3
color: "#55aaff"
}
Text
{
id: combo_box_title_text
anchors.centerIn: combo_box_title
font.family: "Comic Sans MS"
font.pointSize: 9
color: "#e1e100"
text: "Game Settings"
}
Которые отображаются следующим образом
Вы можете видеть, что заголовок моего выпадающего списка имеет границу прямоугольника на заднем плане. Все, что я хочу, это удалить часть границы прямоугольника, которая находится за заголовком.
Есть ли решение моей проблемы? Или любым другим способом у меня может быть такой групповой ящик. Заранее спасибо
Комментарии:
1. Вы можете попробовать нарисовать линию с помощью canvas
2. Я думаю, вам следует удалить текст в верхнем регистре, поскольку это выглядит неуважительно.
3. Подходит ли использование canvas в этом состоянии? Как вы можете видеть в моем коде, у меня есть несколько прямоугольников, где я буду размещать холст? могу ли я нарисовать закругленную линию на холсте, как вы можете видеть в прикрепленной привязке? Не могли бы вы предоставить какой-нибудь код? С уважением
4. @folibis Я удалил текст в верхнем регистре. Я не хотел быть неуважительным.
5. Я думаю,
Canvas
это то, что вам нужно, как сказал @user2436719. Вот простой пример рисования прямоугольника с закругленными углами, с которого вы можете начать.
Ответ №1:
Вы Rectangle
заменяете белую рамку на Canvas
:
Canvas {
id: mycanvas
anchors.fill: parent
onPaint: {
var ctx = getContext("2d");
ctx.strokeStyle = 'white';
ctx.beginPath();
ctx.moveTo(120, 0);
ctx.lineTo(mycanvas.width - 20, 0);
ctx.arc(mycanvas.width - 20,20,20,-Math.PI/2, 0);
ctx.lineTo(mycanvas.width, mycanvas.height - 20);
ctx.arc(mycanvas.width - 20,mycanvas.height - 20,20,0, Math.PI/2);
ctx.lineTo(20, mycanvas.height);
ctx.arc(20,mycanvas.height - 20,20,Math.PI/2,Math.PI);
ctx.lineTo(0, 20);
ctx.arc(20,20,20,Math.PI,-Math.PI/2);
ctx.lineTo(30, 0);
ctx.stroke();
}
}
Вы можете использовать combo_box_title_text.contentWidth
, чтобы точно соответствовать размеру вашего текста