Вы можете попробовать использовать setContextObject метод QQmlContext, если QQmlEngine вы используете.Я создал минимальный Gist , который демонстрирует подход.
По сути, вы создаете собственный класс, производный от QObject, скажем, MyApi
:
class MyAPI : public QObject
{
Q_OBJECT
public:
explicit MyAPI(QObject *parent = nullptr);
// This method will be visible as function in your QML code:
Q_INVOKABLE QString makeUpperCase(const QString &text) const;
};
В васmain.cpp
, установите экземпляр этого класса как объект контекста движка QQmlContext
:
QQmlApplicationEngine engine;
engine.rootContext()->setContextObject(new MyAPI(&app));
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
В коде QML теперь вы можете получить доступ ко всем свойствам, сигналам, слотам и методам Q_INVOKABLE
MyAPI
класса:
Window {
visible: true
width: 640
height: 480
// Call the `makeUpperCase` method of the context object:
title: makeUpperCase("Hello World")
}