如果要使用单个全局类来访问QML或从QML访问.这里您需要在使用setContextProperty()之前创建此类对象。就是说 类实列化一次,QML中可以直接使用这个类。
如:
MainController mainController;
engine.rootContext()->setContextProperty("MainController", &mainController);
则QML中可直接使用 MainController。
将C++实现的类在QML中调用的。与1 不一样,全局不唯一。
如:
qmlRegisterType
每个QML中 会自己实例化一份内存。
Item {
id:root
property bool isMaster: false
AgoraWeb{
id:agoraWeb
}
Qt信号槽中使用自定义类型,需要注意使用qRegisterMetaType对自定义类型进行注册
connect(A,SIGNAL(sendA(TextNumber)),B,SLOT(getA(TextNumber)),Qt::DirectConnection);
直接使用的话,会产生下面这种错误:(假定自定义类为TextNumber)
QObject::connect: Cannot queue arguments of type 'TextNumber' (Make sure 'TextNumber' is registed using qRegisterMetaType().)
实际运行中也会发现,该信号槽没有起作用。
其实解决方法在错误提示中已经给出了:Make sure 'TextNumber' is registed using qRegisterMetaType().
即使用qRegisterMetaType()将自定义类型进行注册
使用方法如下:
步骤:(以自定义TextNumber类型为例)
1、自定一种类型TextNumber,
2、注册位置:在第一次使用此类链接跨线程的signal/slot之前,一般在当前类的构造函数中进行注册;
3、注册方法:在这个类的顶部包含:#include
在类型定义完成后,加入声明:Q_DECLARE_METATYPE(TextNumber);
在构造函数中加入代码:qRegisterMetaType
4、如果还希望使用这种类型的引用,可同样要注册:qRegisterMetaType
上一篇:2009年408大题总结
下一篇:先给我喝一杯,赶走我的烦恼和烦恼