QML的多子项目创建、互调、以及C++类注册

使用背景

工作中,Qt项目往往都是根据功能、逻辑等思想将一个大的项目划分多个子项目工程进行开发(如:qml子项目+控制逻辑子项目+数据子项目+日志子项目等等),因此不同子项目间需要互相调用,然而不同的子项目直接是无法相互调用的。

实际工程事例
在这里插入图片描述
在这个实力中,mycluster文件夹为子项目的目录,mycluster.pro管理这些子项目

如何创建这么多子项目并管理?

  • 1、首先创建一个子项目的总目录
    创建项目—>其他项目—>子项目目录
  • 2、创建qml子项目,这个子项目一般是一个正常的Qt Quick Applicatiuon项目,它包括main.cpp、main.qml等
    创建项目—>Application—>Qt Quick Applicatiuon
  • 3、创建其他的子项目(如:控制逻辑子项目+数据子项目等等)
    • 因为我们可能要跨子项目互相调用,因此我们可以把这些模块通过C++库形式来创建;
    • 创建项目—>库—> C++ Library —>Qt moudule选core即可。并且该自动生成的子项目里会包含一个 子项目名称_global.h的文件,后面会讲。

关联各个子项目

通过上面1~3步骤,我们只是创建了这些子项目工程,但是它们之间并不能相互的关系。因此,我们需要在每个子项目的pro文件进行配置,将他们关联起来。
创建好的总工程如图所示:
在这里插入图片描述

  • 1、总目录的mycluster.pro文件设置,将这些子项目都添加到mycluster项目里来管理:
    在这里插入图片描述

  • 2、LogicControl子项目,这里我们这个子项目要提供给其它的子项目调用;因此,通过LogicControl.pro设置该子项目为外部库的形式,并且要LogicControl_global.h文件也要进行配置:
    在这里插入图片描述在这里插入图片描述
    同理:DataSource子项目也是如此操作。

  • 3、在qmlProject的子项目中我们需要手动添加LogicControl和DataSource这两个子项目库
    在这里插入图片描述在这里插入图片描述
    然后,qmlProject.pro文件会自动生成以下代码
    在这里插入图片描述

如何在QML工程中去使用C++类?

有几下几种常见方式:

  • 方式一:使用rootContext上下文方式管理
  • 方式二:使用qmlRegisterSingletonType方法进行注册
    其中
  • 通常都是使用方式二将C++类对象注册到QML工程中。但是要注意:
    在这里插入图片描述
    这qmlRegisterSingletonType方法的第五个参数是一个回调函数,该回调函数的参数必须是(QQmlEngine*, QJSEngine* ),仅管这两个参数用不到,即:
    SystemSetting *SystemSetting::instance = nullptr; //静态成员属性
    SystemSetting *SystemSetting::getInstance(){
        if(nullptr == instance){
            instance = new SystemSetting;}
        return instance;
        }
    QObject* SystemSetting::singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine){
        Q_UNUSED(engine)
        Q_UNUSED(scriptEngine)
        return SystemSetting::getInstance();
    }
    
    
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值