QML создание типов
Давно программируя на Qt мне стало интересно разобраться с Qml. Одним из первых вопросов встал вопрос создания типов элементов. Пишу напоминалку.
В этом примере, я буду использовать в качестве типа круговую диаграмму, инструкцию по созданию которой я нашел тут.
По шагам:
1. Добавляем в проект новый файл qml.
2. Пишем в созданный файл код, описывающий элемент интерфейса.
Для добавления свойств в тип объекта используется синтаксис (БНФ расширенная):
property <type> <name>[: <default value>]
Для добавления сигналов:
signal <name> [(<arguments>)]
arguments => <type> <name>[,<arguments>]
3. Можем создавать элементы этого типа в main.qml
В этом примере, я буду использовать в качестве типа круговую диаграмму, инструкцию по созданию которой я нашел тут.
Результат выполнения программы |
По шагам:
1. Добавляем в проект новый файл qml.
2. Пишем в созданный файл код, описывающий элемент интерфейса.
Для добавления свойств в тип объекта используется синтаксис (БНФ расширенная):
property <type> <name>[: <default value>]
Для добавления сигналов:
signal <name> [(<arguments>)]
arguments => <type> <name>[,<arguments>]
Canvas { id:canvas //Property adding property ListModel model: ListModel{} smooth: true onPaint: { var ctx = canvas.getContext("2d") ctx.clearRect(0, 0, width, height) var centerX = width / 2 var centerY = height / 2 var radius = 0.9 * Math.min(width, height) / 2 var startAngle = 0.0 var endAngle = 0.0 var angleFactor = 2 * Math.PI / modelSum() ctx.lineWidth = 0 ctx.strokeStyle = Qt.lighter("#000000") for (var index = 0; index < model.count; index++) { startAngle = endAngle endAngle = startAngle + model.get(index).value * angleFactor ctx.fillStyle = model.get(index).color ctx.beginPath() ctx.moveTo(centerX, centerY) ctx.arc(centerX, centerY, radius, startAngle, endAngle, false) ctx.lineTo(centerX, centerY) ctx.fill() ctx.stroke() } } function modelSum() { var modelSum = 0 for (var index = 0; index < model.count; index++) { modelSum += model.get(index).value } return modelSum } }
3. Можем создавать элементы этого типа в main.qml
Rectangle { width: 360 height: 360 color: "#BBBBBB" id: root ListModel { id:listModel ListElement { label:"Scientific Research"; value:21; color:"#777777" } ListElement { label:"Engineering & Design"; value:18; color:"#6666FF" } ListElement { label:"Automotive"; value:14; color:"#66FF66" } } Chart { model:ListModel { ListElement { label:"Scientific Research"; value:21; color:"#777777" } ListElement { label:"Engineering & Design"; value:18; color:"#666666" } ListElement { label:"Automotive"; value:14; color:"#66FF66" } } id:testChart width:100 height:100 } Chart { id:testChart1 model:listModel width:100 height:100 x:100 } }
Комментарии
Отправить комментарий