Frage

Ich habe eine QT -Funktion:

void MainWindow::button_clicked(Qstring a, Qstring b, Qstring c, Qstring d)

Ich sammle Daten von QML und möchte Daten an diese Funktion übergeben, die in QT ist. Ich weiß also, dass ich benutzen muss Q_INVOKABLE Aber weiß nicht wirklich, wie man es benutzt.

Und noch eine Sache ist es möglich, eine andere Funktion aufzurufen, wenn sie sich oben auf diese Weise aufrufen.
Zum Beispiel: Ich rufe die obige Funktion auf, aber in ihrem Körper rufe ich auf refresh() Funktion. Ist das möglich?

War es hilfreich?

Lösung

Um eine Methode von QML aufzurufen, müssen Sie sie entweder mit q_invokable oder als Slot markieren. Ich bevorzuge q_invokable, wenn es nicht als Steckplatz verwendet werden soll, da es minimaler ist.

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
...
    Q_INVOKABLE void buttonClicked( const QString& a, const QString& b, const QString& c, const QString& d );
....
};

void MainWindow::buttonClicked( const QString& a, const QString& b, const QString& c, const QString& d ) {
   ...do stuff
   update(); //example
}

Die Implementierung von buttonclicked () kann jeden C ++ - Code enthalten.

Um die Hauptfensterinstanz von QML zugänglich zu machen, müssen Sie sie registrieren, z. B.

QDeclarativeView* view = ...your view
view->rootContext()->setContextProperty( "_mainWindow", mainWindow );

Sobald Sie registriert sind, können Sie von QML von qML anrufen:

_mainWindow.buttonClicked("foo", "bar", "c", "d")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top