C++ Klassenvariable in QML

Alles rund um die Programmierung mit Qt Quick und QML
Antworten
msauer75
Beiträge: 6
Registriert: 12. November 2017 09:20

C++ Klassenvariable in QML

Beitrag von msauer75 » 26. November 2017 09:47

Hallo zusammen,
ich versuch mich gerade an meinem ersten QML Projekt und habe jetzt folgendes Problem: Ich habe eine MainWindow mit verschiedenen Knöpfen, die beim anklicken ein neues QML Fenster öffnen und eine neue Instanz einer C++ Klasse anlegen soll. In dem neu geöffneten Fenster will ich dann Daten zwischen der angelegten Instanz und dem Fenster austauschen. In einer QtWidget Anwendung mach ich dies in einem SLOT der entsprechenden QtWidget Klasse. Wie mache dies aber in einer QML Anwendung?
Danke für Eure Hilfe.
gruss
martin

hilefoks
Beiträge: 141
Registriert: 13. März 2008 17:09

Re: C++ Klassenvariable in QML

Beitrag von hilefoks » 30. November 2017 15:15

Wenn du eine neue Instanz der C++ Klasse anlegst, wie du schreibst, dann hast du diese Klasse bereits in QML registriert. In QML hast du dann also im Prinzip ähnlichen Code wie diesen:

Code: Alles auswählen

import MyComponent 1.0

Item {
    MyClass {
        id: myClass
    }
    //...
}
Auf eine solche Instanz der C++ Klasse (instanziert in QML) kannst du über dessen id zugreifen, hier also myClass. Zugreifen kannst du dabei auf alle Properties (Q_PROPERTY), alle mit Q_INVOKABLE makierten Methoden und auf alle öffentlichen Slots. Wäre MyClass folgendermaßen definiert:

Code: Alles auswählen

class MyClass : public QObject {
    Q_OBJECT
    Q_PROPERTY(QString name READ name WRITE setName NOTIFIY nameChanged)
 public:
    //...
}
Hier könntest aus QML also auf die Property name sowohl lesend als auch schreibend zugreifen:

Code: Alles auswählen

import MyComponent 1.0

Item {
    MyClass {
        id: myClass
    }
    Text {
        text: myClass.name
    }
    
    Component.onCompleted: myClass.name = "Hello World!";
}
MfG
Hilefoks

Antworten