Необходимо создать модели группы физических тел с возможностью редактирования их параметров без перекомпиляции. Решил для этого дела использовать QML - удобный синтаксис, можно объявлять функции для специфического обсчета параметров. Все классно, но хотелось бы максимально отстраниться от Quick.
Создал 2 класса:
class Model : public QObject
{
Q_OBJECT
public:
explicit Model(QObject *parent = Q_NULLPTR);
}
class Anode : public QObject
{
Q_OBJECT
public:
explicit Anode(QObject *parent = Q_NULLPTR);
}
Зарегистрировал типы в
main.cpp:
int main(int argc, char *argv[])
{
qmlRegisterType<Model>("Model", 1, 0, "Model");
qmlRegisterType<Anode>("Model", 1, 0, "Anode");
// ...
}
Создаю QML-файл:
import Model 1.0
Model {
Anode {
}
}
Загружаю qml-файл:
QQmlEngine engine;
QQmlComponent component(&engine);
component.loadUrl(QUrl("types/type1.qml"));
QObject *myObject = component.create();
получаю ошибку:
QQmlComponent: Component is not ready
Загружаю по другому:
QQmlApplicationEngine engine;
engine.load(QUrl("types/type1.qml"));
получаю ошибку:
types/type1.qml:4 Cannot assign to non-existent default property
Ну что за такое
default property, имя которого не отображается в дебаге?
Стоит убрать объект Anode из Model, как все работает.
Окей, добавляю Q_PROPERTY(Anode* anode READ anode WRITE setAnode NOTIFY anodeChanged) в Model и правлю qml-файл:
import Model 1.0
Model {
anode: Anode {
}
}
получаю ошибку:
types/type1.qml:4 Unexpected object assignment
Если оба этих объекта унаследовать не от
QObject, а от
QQuickItem, то все будет работать, но мне не нужен
Item со всеми его x, y, width, height и т.д., особенно учитывая то, что эти параметры будут перекрываться некоторыми сущностями модели. Как победить этот Qml?