Вот пример: http://doc.qt.io/qt-5/qtdatavisualization-qmlscatter-example.html использования qml и QtQuick для создания трехмерного рассеяния.
Как я могу изменить (удалить, добавить, очистить) данные ListModel в файле Data.qml, используя код C ++?
Data.qml
import QtQuick 2.1
Item {
property alias model: dataModel
property alias modelTwo: dataModelTwo
property alias modelThree: dataModelThree
ListModel {
id: dataModel
ListElement{ xPos: -10.0; yPos: 5.0; zPos: -5.0 }
ListElement{ xPos: -9.0; yPos: 3.0; zPos: -4.5 }
ListElement{ xPos: -8.5; yPos: 4.1; zPos: -4.0 }
...
}
...
}
Если вы хотите изменить модель из C ++, вы можете зарегистрировать объект, который реализует QAbstractItemModel
в среду выполнения QML.
QAbstraactItemModel
это довольно сложный класс, есть полезные производные типы, которые могут упростить реализацию, но это зависит от вашего варианта использования. Например, QAbstractListModel
полезен для списков, в отличие от таблиц, и QStandardItemModel
полезно для данных, которые могут быть легко смоделированы в QStandardItems
,
После того, как вы реализовали модель в C ++, вам нужно сделать ее доступной для среды выполнения QML. Это сделано с помощью setContextProperty
на QQmlContext
, Как правило, QQmlContext
ты хочешь это rootContext()
вашей QQmlEngine
,
Регистрация может выглядеть примерно так:
int main(int argc, char **argv) {
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
MyListModel *model = new MyListModel;
engine.rootContext()->setContextProperty("myListModel", model);
engine.load(":/myqmlapp.qml");
app.exec();
[...]
}
Для доступа к модели из QML вы используете имя, под которым она была зарегистрирована, в данном случае myListModel
:
import QtQuick 2.7
Item {
ListView {
model: myListModel
}
}
Других решений пока нет …