Есть программа на С++, решил я меню к ней нарисовать с QML (Сейчас оно нарисовано на С++, но QML решил попробовать на этом примере)
Посмотрел вот эту статью:
http://habrahabr.ru/post/184416/Сделал что-то подобное, но у меня кроме меню есть еще что-то типа тулбара.
Набросок того, как я хотел бы чтобы это выглядело, я прикрепил.
Вобщем на верхнем уровне есть прямоугольник, в него вложено
- прямоугольник тулбара (пока что пустой)
- прямоугольник меню, который вложено:
- модель с
- девятью кнопками
- вью для модели
В коде (ужасный, я знаю) :
import QtQuick 2.1
Rectangle {
color: Qt.rgba(0.69, 0.76, 0.86, 1) //176, 196, 222
Rectangle {
id: toolbar
width: parent.width
height: 40
color: Qt.rgba(0, 0, 0, 0)
radius: 20
border {
color: "black"
width: 1
}
} // Toolbar Rectangle
Rectangle {
width: Math.min(parent.width, parent.height - toolbar.height)
height: Math.min(parent.width, parent.height - toolbar.height)
y: toolbar.height + (parent.height - height) / 2
color: Qt.rgba(0, 0, 0, 0)
radius: 20
border {
color: "black"
width: 1
}
ListModel {
id: dataModel
ListElement { }
ListElement { }
ListElement { }
ListElement { }
ListElement { }
ListElement { }
ListElement { }
ListElement { }
ListElement { }
}
GridView {
id: view
anchors.margins: 10
anchors.fill: parent
cellHeight: (parent.height - 20) / 3
cellWidth: (parent.width - 20) / 3
model: dataModel
clip: true
delegate: Item {
property var view: GridView.view
signal send()
height: view.cellHeight
width: view.cellWidth
Rectangle {
anchors.margins: 5
anchors.fill: parent
color: "tomato"
radius: 20
border {
color: "black"
width: 1
}
Image {
anchors.fill: parent;
}
MouseArea {
id: mousearea
anchors.fill: parent
onClicked: {
view.currentIndex = model.index
}
}
Component.onCompleted: {
mousearea.clicked.connect(send)
}
Text {
anchors.centerIn: parent
renderType: Text.NativeRendering
}
} // Rectangle button
} // Item of View (button)
} // GridView
} // Toolbar Rectangle
} // Rectangle main
Мне надо обрабатывать в С++ коде нажатия кнопок в меню. У элемента модели я описал сигнал send.
Не понятно как соединить этот сигнал со слотом С++.
Вот тут:
http://www.prog.org.ru/topic_26510_0.htmlя прочитал:
В моем понимании, у программы на QML должно быть одно окно, где-то мы тут это уже обсуждали.
Я понял это так, что вложенных прямоугольников быть не должно. Правильно ли я понял.
С другой стороны, даже если я смотрю на пример со статьи на хабре, то все равно не допираю как соединить.
В С++ коде юзается rootObject(), но он даст указатель на верхний прямоугольник или на вью, но никак не на нужный мне айтем.
Ну или вот сюда я смотрю:
http://habrahabr.ru/post/184288/GroupBox {
id: gridBox
title: "Grid layout"
Layout.fillWidth: true
GridLayout {
id: gridLayout
anchors.fill: parent
rows: 3
flow: GridLayout.TopToBottom
Label { text: "Line 1" }
Label { text: "Line 2" }
Label { text: "Line 3" }
Как автор этого кода собрался получать доступ к этим Label?