main.cpp注册 C++ 类到 QML 元对象系统

可以。常见做法是在 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调用 的完整最小示例。

相关推荐
青少儿编程课堂9 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛
YSL0701249 小时前
C++基础
开发语言·c++
eggwyw10 小时前
关于C++为什么不加入垃圾回收机制解析
开发语言·c++
曦樂~20 小时前
Cpp面筋
c语言·c++
道尔柯南20 小时前
C++ string 类详解:从常用接口到深拷贝,彻底掌握字符串处理
android·java·c++
十二1 天前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
D e re k ZH1 天前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法
zjxtxdy1 天前
C++面向对象程序开发-类与对象
开发语言·c++
東隅已逝,桑榆非晚1 天前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法
qq_406981031 天前
c++拷贝构造函数
开发语言·c++