Делаю проект с использованием Qt, интерфейс на Qml. Возник такой вопрос: есть свой класс, как можно вызвать функцию для объекта этого класса из Qml без создания этого объекта непосредственно в Qml-коде?
То есть объект существует сам по себе в C++ части приложения, нужно вызвать один из его методов из Qml.
Делаю проект с использованием Qt, интерфейс на Qml. Возник такой вопрос: есть свой класс, как можно вызвать функцию для объекта этого класса из Qml без создания этого объекта непосредственно в Qml-коде?
То есть объект существует сам по себе в C++ части приложения, нужно вызвать один из его методов из Qml.
Можно так, свой класс, customclass.h:
class CustomClass : public QObject { Q_OBJECT public: Q_INVOKABLE void methodToInvoke() { // Here is the code } };
main.cpp:
int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQuickView view; MyCustomClass customClassObject; view.rootContext()->setContextProperty("customClassObject", &customClassObject); view.setSource(QUrl::fromLocalFile("main.qml")); view.show(); return app.exec(); }
И в QML, main.qml:
customClassObject.methodToInvoke();
@aveal у меня в main() чуть по-другому:
QGuiApplication app(argc, argv); QQmlApplicationEngine engine; const QUrl url(QStringLiteral("qrc:/qml/main.qml")); engine.load(url);
@dafna тогда:
engine.rootContext()->setContextProperty("customClassObject", &customClassObject);