J'ai des problèmes avec les propriétés.
J'ai donc quelques classes (UML)
CNode
|--CNode2D
|--CSprite2D
CNode
a les propriétés suivantes :
Q_OBJECT
Q_PROPERTY(QString name READ getName WRITE setName)
Q_PROPERTY(bool visible READ getVisible WRITE setVisible)
Q_PROPERTY(bool enabled READ getEnabled WRITE setEnabled)
CNode2D
les a :
Q_OBJECT
Q_PROPERTY(float Position_X READ getPosX WRITE setPosX)
Q_PROPERTY(float Position_Y READ getPosY WRITE setPosY)
Q_PROPERTY(float height READ getHeight WRITE setHeight)
CSprite2D
n'en a pas...
Si j'essaie d'imprimer les propriétés dans le constructeur de CSprite2D
for(int i = metaObject()->propertyOffset(); i < metaObject()->propertyCount(); ++i)
{
qDebug() << metaObject()->property(i).name() << metaObject()->property(i).read(this);
}
Je n'obtiens en sortie que les propriétés de CNode2D
Position_X QVariant(float, 7.47779e+21)
Position_Y QVariant(float, 4.58827e-41)
height QVariant(float, 0)
Ce qui m'amène à penser que CNode2D
n'hérite pas des propriétés de CNode
...
Seulement CNode
hérite de QObject
.
Si je fais hériter les deux autres classes de QObject
je reçois des erreurs de compilation.
Je suis nouveau à Qt, donc je pourrais avoir oublié quelque chose d'important, dans ce cas, désolé.
EDIT : Voici les définitions des classes (j'ai supprimé les inclusions) :
class CNode: public QObject
{
public:
CNode();
QString getName();
void setName(QString nameI);
bool getVisible ();
void setVisible (bool i);
void setEnabled(bool i);
bool getEnabled();
public slots:
void nameChanged();
void visibleChanged();
void enabledChanged();
public: //properties
Q_OBJECT
Q_PROPERTY(QString name READ getName WRITE setName)
Q_PROPERTY(bool visible READ getVisible WRITE setVisible)
Q_PROPERTY(bool enabled READ getEnabled WRITE setEnabled)
protected:
QTreeWidgetItem* nodeListItem;
QString name;
bool enabled;
bool visible; //if the node has to get rendered
};
class CNode2D: public CNode
{
public:
CNode2D();
virtual ~CNode2D();
void setPosX(float i);
float getPosX();
float getPosY();
void setPosY(float i);
float getHeight();
void setHeight(float i);
public slots:
void posXChanged();
void posYChanged();
void heightChanged();
public:
Q_OBJECT
Q_PROPERTY(float Position_X READ getPosX WRITE setPosX)
Q_PROPERTY(float Position_Y READ getPosY WRITE setPosY)
Q_PROPERTY(float height READ getHeight WRITE setHeight)
protected:
float height;
float posX;
float posY;
};
class CSprite2D: public CNode2D
{
public:
CSprite2D(int number, Ui::MainWindow *i);
~CSprite2D();
int getPosX();
int getPosY();
void compile();
private:
Ui::MainWindow *ui;
int number_sprite;
QString spriteLink;
void drawSprite();
};