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

相关推荐
Junfeng的技术笔记38 分钟前
基于 C++/Qt 的雷达回波信号检测与测距仿真系统
qt
Quz1 小时前
QML TableView:自定义样式与排序表格
qt
Quz1 小时前
QML TableView:可编辑表格与 SQLite 数据持久化
qt·sqlite
Quz1 小时前
QML ListView:C++ 数据模型与 ProxyModel 实时过滤
qt
Quz1 小时前
QML ListView 入门:自定义样式与数据交互
qt
cpp_learner1 小时前
QT 隐藏式密码鉴权:一键开启管理员模式
qt
小小龙学IT2 小时前
Boost.Interprocess 开源 C++ 进程间通信库深度解析
c++·开源
倒头就睡的小比特5 天前
算法竞赛C++常用的STL
c++·算法
weilx12345 天前
C++笔记-文件IO-<fcntl.h>
c++
Smileyqp沛沛6 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++