Подключение C++ с QML с помощью Q INVOKABLE
у меня есть функция Qt:
void MainWindow::button_clicked(Qstring a, Qstring b, Qstring c, Qstring d)
Я собираю данные из QML, и я хочу передать данные этой функции, которая находится в Qt. Поэтому я знаю, что мне нужно использовать Q_INVOKABLE
но не знаю как использовать его.
и еще одна вещь-можно вызвать какую-то другую функцию при вызове этого определенного выше.
Например: я вызываю вышеуказанную функцию, но в ее теле я вызываю
1 ответов
чтобы иметь возможность вызывать метод из QML, вы должны либо пометить его Q_INVOKABLE, либо как слот. Я предпочитаю Q_INVOKABLE, если он не предназначен для использования в качестве слота, как его более минимальный.
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
}
реализация buttonClicked() может содержать любой код на C++.
чтобы сделать экземпляр главного окна доступным из QML, вы должны зарегистрировать его, например
QDeclarativeView* view = ...your view
view->rootContext()->setContextProperty( "_mainWindow", mainWindow );
после регистрации вы можете вызвать buttonClicked из QML:
_mainWindow.buttonClicked("foo", "bar", "c", "d")