Столкнулся c такой проблемой:
Нужно импортировать в Qml классы из С++. Создал базовый класс А (наследует QObject), в нем объявлены свойства А1, А2 ...
Зарегистрировал тип, запустил,в Qml свойства устанавливаются, все в порядке. Теперь создаем класс B, унаследованный от базового А, со свойствами B1,B2.. Сам класс импортируется нормально, но не дает в Qml записать свойства ( B { B1: arg; } ), ругается при запуске, что свойство не найдено (Cannot assign to non-existent property). Из-за чего так получается? ну и как поправить?)
Объявление базового класса
#include <QObject>
class SpaceObject : public QObject
{
Q_OBJECT
Q_PROPERTY(int x READ x WRITE setx NOTIFY xChanged)
Q_PROPERTY(int y READ y WRITE setY NOTIFY yChanged)
Q_PROPERTY(int radius READ radius WRITE setradius NOTIFY radiusChanged)
Q_PROPERTY(QString name READ name WRITE setname NOTIFY nameChanged)
int m_x;
int m_y;
int m_radius;
QString m_name;
public:
explicit SpaceObject(QObject *parent = 0);
int x() const
{
return m_x;
}
int y() const
{
return m_y;
}
int radius() const
{
return m_radius;
}
QString name() const
{
return m_name;
}
signals:
void xChanged(int x);
void yChanged(int y);
void radiusChanged(int radius);
void nameChanged(QString name);
public slots:
void setx(int x)
{
if (m_x == x)
return;
m_x = x;
emit xChanged(x);
}
void setY(int y)
{
if (m_y == y)
return;
m_y = y;
emit yChanged(y);
}
void setradius(int radius)
{
if (m_radius == radius)
return;
m_radius = radius;
emit radiusChanged(radius);
}
void setname(QString name)
{
if (m_name == name)
return;
m_name = name;
emit nameChanged(name);
}
};
Объявление производного класса:
[img]#include "spaceobject.h"
class Planet : public SpaceObject
{
Q_OBJECT
Q_PROPERTY(int orbit_radius READ orbit_radius WRITE setOrbit_radius NOTIFY orbit_radiusChanged)
public:
Planet();
int orbit_radius() const
{
return m_orbit_radius;
}
public slots:
void setOrbit_radius(int orbit_radius)
{
if (m_orbit_radius == orbit_radius)
return;
m_orbit_radius = orbit_radius;
emit orbit_radiusChanged(orbit_radius);
}
signals:
void orbit_radiusChanged(int orbit_radius);
private:
int m_orbit_radius;
};[/img]
Майн:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlComponent>
#include "spaceobject.h"
#include "star.h"
#include "planet.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QUrl sw((QStringLiteral("qrc:/main.qml")));
qmlRegisterType<SpaceObject>("space", 1, 0, "SpaceObject");
qmlRegisterType<Star>("space", 1, 0, "Star");
qmlRegisterType<Planet>("space", 1, 0, "Planet");
QQmlApplicationEngine engine;
engine.load(sw);
return app.exec();
}