Qt - Как динамически вставлять объекты Qml из класса C++
Мне нужен совет по поводу моего простого приложения QT/QML.
У меня следующая ситуация:
Что касается интерфейса, у меня есть основная область, которая называется flickableArea (flickableArea.qml), разделенная на четыре области (элемент slot1, элемент slot2, элемент slot3 и элемент slot4).
Каждый слот заполнен объектом QML Rectangle.
slot1 заполнен прямоугольником с id =area1, slot2 заполнен прямоугольником с id =area2, slot3 заполнен прямоугольником с id =area3, slot4 заполнен прямоугольником с id =area4
ФАЙЛ flickableArea.qml
import QtQuick 2.4
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.4
Item {
property alias mainGrid: mainGrid
property alias slot1: slot1
property alias slot2: slot2
property alias slot3: slot3
property alias slot4: slot4
id: flickableAreaItem
width: 600
height: 300
Flickable {
id: flickableArea
boundsBehavior: Flickable.DragOverBounds
interactive: true
flickableDirection: Flickable.HorizontalFlick
anchors.fill: parent
GridLayout {
id: mainGrid
columnSpacing: 3
rowSpacing: 3
rows: 2
columns: 2
anchors.fill: parent
Item {
id: slot1
Layout.fillWidth: true
Layout.fillHeight: true
clip: false
Rectangle {
anchors.fill: parent
border.width: 1
border.color: "black"
}
}
Item {
id: slot2
Layout.fillWidth: true
Layout.fillHeight: true
clip: false
Rectangle {
anchors.fill: parent
border.width: 1
border.color: "black"
}
}
Item {
id: slot3
Layout.fillWidth: true
Layout.fillHeight: true
clip: false
Rectangle {
anchors.fill: parent
border.width: 1
border.color: "black"
}
}
Item {
id: slot4
Layout.fillWidth: true
Layout.fillHeight: true
clip: false
Rectangle {
anchors.fill: parent
border.width: 1
border.color: "black"
}
}
}
}
}
Я должен вставлять динамически объекты QML в area1, area2, area3 и area4, когда определенный код запускается в коде C++. В коде C++, когда сигнал срабатывает, я запускаю следующий код, чтобы создать новый объект (ObjectToIntroduce), связанный с Object.qml:
ObjectToIntroduce *obj;
obj = new ObjectToIntroduce();
QQmlContext *objContext = engine->rootContext();
objContext->setContextProperty("obj", obj);
После того, как я сделал новый ObjectToIntroduce, как я могу представить / уничтожить (просмотреть / скрыть) Object.qml в area1/area2/area3/area4 из flickableArea.qml?
Я хочу знать, как лучше всего реализовать этот механизм при написании этого простого приложения на Qt/Qml. Спасибо за совет, с наилучшими пожеланиями
Леле