可以。常见做法是在 main.cpp 里用 qmlRegisterType() 把 C++ 类注册给 QML。
1. 先让类具备 QML 元对象能力
cpp
class BoatController : public QObject
{
Q_OBJECT
Q_PROPERTY(int speed READ speed WRITE setSpeed NOTIFY speedChanged)
public:
explicit BoatController(QObject *parent = nullptr);
int speed() const;
void setSpeed(int v);
signals:
void speedChanged();
};
2. 在 main.cpp 里注册
cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QtQml>
#include "BoatController.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
qmlRegisterType<BoatController>("Shore", 1, 0, "BoatController");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
3. QML 中使用
qml
import Shore 1.0
BoatController {
id: controller
}
如果你是想把一个已经创建好的对象给 QML 用,不是注册类型,而是:
cpp
BoatController controller;
engine.rootContext()->setContextProperty("boatController", &controller);
然后 QML 里直接用:
qml
boatController.speed
一句话区分:
qmlRegisterType:QML 里自己创建对象setContextProperty:C++ 先创建对象,QML 直接用
如果你愿意,我可以按你这个 Shore 项目,直接给你写一版 main.cpp + C++类 + QML调用 的完整最小示例。