您现在的位置是:网站首页> C/C++

setContextProperty qmlRegisterType qRegisterMetaType等区别

  • C/C++
  • 2022-03-26
  • 1047人已阅读
摘要

1,setContextProperty


如果要使用单个全局类来访问QML或从QML访问.这里您需要在使用setContextProperty()之前创建此类对象。就是说 类实列化一次,QML中可以直接使用这个类。


如:


  MainController mainController;  

  engine.rootContext()->setContextProperty("MainController", &mainController);

则QML中可直接使用 MainController。


 


2,qmlRegisterType 


将C++实现的类在QML中调用的。与1 不一样,全局不唯一。


如:


qmlRegisterType<AgoraWeb>("AgoraWeb",1,0,"AgoraWeb");

  每个QML中 会自己实例化一份内存。


Item {

    id:root

    property bool isMaster: false

    AgoraWeb{

        id:agoraWeb

    }

3,qRegisterMetaType


Qt信号槽中使用自定义类型,需要注意使用qRegisterMetaType对自定义类型进行注册


 


步骤:(以自定义TextNumber类型为例)


自定一种类型,在这个类型的顶部包含:#include <QMetaType>


在类型定义完成后,加入声明:Q_DECLARE_METATYPE(TextNumber);


在main()函数中注册这种类型:qRegisterMetaType<TextNumber>("TextNumber");


如果还希望使用这种类型的引用,可同样要注册:qRegisterMetaType<TextNumber>("TextNumber&")


Top