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

相关推荐
YYYing.1 小时前
【C++进阶系列 (二)】关于线程堆栈的那些事——函数调用过程
开发语言·c++·函数·线程堆栈
键盘会跳舞2 小时前
【C++多线程】死锁诊断工具实战:从 Windows 到 Linux 的全链路排查
linux·c++·windows·死锁
HugoStudio_SWAN3 小时前
洛谷 P10719 \[GESP202406 五级] 黑白格——暴力美学与图像处理的最小外接矩形
c++·图像处理·人工智能·学习·程序人生·算法·目标跟踪
jimy13 小时前
C++ 的 “移动语义”——Move Semantics
开发语言·c++
励志不掉头发的内向程序员5 小时前
【LibreCAD 2D架构】从鼠标点击到图形创建:RS_ActionDrawLine交互流程与状态机解析
开发语言·c++·qt·学习·系统架构·计算机外设·交互
OPEN-F5 小时前
ROS2系列教程:Gazebo插件(关节控制/IMU/激光雷达)
c++·python·数码相机·算法·机器人
蒸蒸yyyyzwd6 小时前
cpp 选手秋招学习笔记 day27
服务器·c++·面试·八股
haolin123.6 小时前
STL vector底层揭秘:从构造到迭代器失效
开发语言·c++·算法
尘中远6 小时前
给C++工业软件搭建 Agent
开发语言·c++·qt·ai·agent