天天看点

Qml关于注册c++对象

在写QT程序的时候经常会把c++类注册到qml中

但,可以分为两种,一种是实例后添加到qml上下文中

比如:我们在main.cpp的main函数中

QxView::AppCtrlBase *app_ctrl;//定义一个指针

 app_ctrl = AppCtrl::getInstance();//new一个实例

QQmlApplicationEngine engine;

engine.rootContext()->setContextProperty("gAppCtrl", app_ctrl );//将实例添加进qml

接着,我们可以在qml中用到gAppCtrl了,其实gAppCtrl是一个app_ctrl 的引用,引用在qt中用的非常多,

 

qml中如下:
    QtObject

    {
        id: idRootPriv;
        property var m_vm : null;
    }
    // ///
    // event and signals handler事件和信号处理程序
    // ///
    Component.onCompleted:
    {
        console.debug("Window onCompleted.");//在完成窗口
        idRootPriv.m_vm = gAppCtrl.allocViewModel("");
    }
还有一种就是只是注册一个c++的类到qml

qmlRegisterType<IolCalcvm>("capIolcalc.com",1,0,"IolCalcvm");

然后在qml中

import capIolcalc.com 1.0//添加包

property IolCalcvm iolCalcNormalModel: idRootPriv.m_vm.getiolCalcvm()

这里就可以定义一个IolCalcvm 类型的变量,然后通过后面的idRootPriv.m_vm.getiolCalcvm()来获取实例

 
      

继续阅读