Top.Mail.Ru
Уведомления
Очистить все

[Решено] Вызвать метод C++ класса из QML

(@dafna)
Level 1

Делаю проект с использованием Qt, интерфейс на Qml. Возник такой вопрос: есть свой класс, как можно вызвать функцию для объекта этого класса из Qml без создания этого объекта непосредственно в Qml-коде? 

То есть объект существует сам по себе в C++ части приложения, нужно вызвать один из его методов из Qml.

Цитата
Создатель темы Размещено : 28.10.2023 12:56
Метки темы
Aveal
(@aveal)
Top level Admin

Запись от: @dafna

Делаю проект с использованием 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();

 

ОтветитьЦитата
Размещено : 29.10.2023 11:01
(@dafna)
Level 1

@aveal у меня в main() чуть по-другому:

QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;

const QUrl url(QStringLiteral("qrc:/qml/main.qml"));
engine.load(url);
ОтветитьЦитата
Создатель темы Размещено : 29.10.2023 11:37
Aveal
(@aveal)
Top level Admin

@dafna тогда:

engine.rootContext()->setContextProperty("customClassObject", &customClassObject);
ОтветитьЦитата
Размещено : 29.10.2023 11:57
Поделиться: