J'ai la classe suivante, dans un ContextProperty
au début de l'application:Accès QObject hérité classe d'une autre classe QObject
class MyClass : public QObject
{
Q_OBJECT
public:
Q_INVOKABLE MyClassModel getModel() const { return m_myClassModel; }
private:
MyClassModel m_myClassModel;
}
Dans l'une de ses méthodes, MyClass
remplit m_myClassModel
avec des données (provenant d'un serveur).
MyClassModel
hérite aussi QObject
(à cause de Q_PROPERTY
macros):
class MyClassModel : public QObject
{
Q_OBJECT
// Lots of Q_PROPERTY macros
Q_PROPERTY(int stuff READ stuff WRITE setStuff NOTIFY stuffChanged)
public:
...
signals:
void stuffChanged();
...
}
Puis, dans un fichier QML, MyClassModel
est utilisé pour déclencher des signaux et mettre à jour les éléments graphiques:
Item
{
anchors.fill: parent
CustomLabel
{
Connections
{
target: myClass.myClassModel()
onStuffChanged: { console.log("signal triggered!") }
}
}
}
En raison de Q_INVOKABLE MyClassModel getModel() const { return m_myClassModel; }
, J'obtiens cette erreur:
error: C2248: 'QObject::QObject' : cannot access private member declared in class 'QObject'
Je pense que je comprends la cause de cette erreur, mais je ne suis pas sûr de ce que je devrais faire pour l'empêcher. J'ai besoin d'avoir accès à MyClassModel
de MyClass
afin de le remplir avec des données, mais je ne peux pas le retourner dans mon fichier QML
.
explication Excellent, merci! –