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调用 的完整最小示例。

相关推荐
草莓熊Lotso2 小时前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
把我格子衫拿来9 小时前
VTK 9.5 与 Qt 6 联合开发:从嵌入三维窗口到可维护的桌面架构
c++·python·qt·vtk·三维可视化
无忧.芙桃9 小时前
C++语言原理与实践(十六):多态机制讲解
开发语言·c++·多态
wuminyu11 小时前
JMM学习总结:深入理解happens-before关系
java·linux·c语言·jvm·c++
xxwl58511 小时前
区域赛分类题解
c++·笔记·学习·算法
青少儿编程课堂11 小时前
蓝桥杯+全国青少年信息素养大赛+电子学会PythonC/C++考级:最长公共子序列LCS解析
c++·python·算法·bfs·信息学竞赛
代钦塔拉13 小时前
【C++/Qt 进阶】设计模式系列(2):工厂模式——从游戏角色到披萨店
c++·算法·设计模式
把我格子衫拿来14 小时前
VTK 与 Qt 的 CMake 工程怎么组织?模块、工具链与二进制兼容排错
c++·qt·vtk·cmake·工程实践
灯澜忆梦15 小时前
【面向对象编程c++】| 指针与自定义数据类型
开发语言·c++·算法
xxwl58515 小时前
区域赛算法模版第八章---贪心(Greedy)
c++·笔记·学习·算法