2 votes

Accès aux instances d'une classe à partir d'un contexte qml

Je suis novice en matière de QT et de QML. J'ai une classe qui instancie des sous-classes. J'aimerais exposer les méthodes de ces sous-classes à mon interface utilisateur par le biais d'une liaison QML.

Par exemple

class MainClass: QObject
{
   Q_OBJECT
   Subclass subclass;
   MainClass();

}

class Subclass:QObject
{
  Q_Object
  Subclass();

  public slots:
  void someMethod();
}

Main.C

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QQuickView *view = new QQuickView; 
    MainClass mainclass;      
    view->rootContext()->setContextProperty("MainClass", &mainClass);
    view->setSource(QUrl("qrc:/main.qml"));
    view->show();
}

Dans ce cas, j'aimerais accéder à mainclass.subclass.someMethod() depuis l'interface utilisateur QML.

Existe-t-il une bonne façon de procéder ? Dois-je fournir des méthodes d'enveloppe dans MainClass pour chaque fonction/propriété à laquelle j'aimerais accéder ?

4voto

jpnurmi Points 4408

C'est possible en faisant SubClass une propriété de MainClass . Par exemple :

class MainClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(SubClass *subClass MEMBER subClass CONSTANT)

public:
    MainClass();

private:
    SubClass *subclass;
};

Elles sont appelées " propriétés groupées " en QML.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X