一、QML 文件加载方式
一共三种方式加载QML 文件。
一, QQmlApplicationEngine+ Window
此种方式以Window为根对象的QML文件,这个时候QML就完全拥有了控制权,可以直接设置窗体的标题、尺寸等信息
永久加载,存在内存中;
二,QQuickView + Rectangle
main.cpp
此种方式对窗口的控制权在C++代码中要实现,QML文件是以Item作为根对象的。需要设置标题可在c++ 中调用(view.setTitle("xxxx"))
如果Rectangle 换车Window 则会出现两个窗口。
三,QQuickWidget +Rectangle
因为QQuickWidget 继承QWidget ,所以应该是使用QApplication
pro 文件需要添加 QT += quickwidgets
二、C++ 类注册方式
setContextProperty qmlRegisterType qRegisterMetaTyp
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中 会自己实例化一份内存。
3,qRegisterMetaType
Qt信号槽中使用自定义类型,需要注意使用qRegisterMetaType对自定义类型进行注册
步骤:(以自定义TextNumber类型为例)
自定一种类型,在这个类型的顶部包含:#include <QMetaType>
在类型定义完成后,加入声明:Q_DECLARE_METATYPE(TextNumber);
在main()函数中注册这种类型:qRegisterMetaType<TextNumber>("TextNumber");
如果还希望使用这种类型的引用,可同样要注册:qRegisterMetaType<TextNumber>("TextNumber&")
三、QCoreApplication、QGuiApplication、QApplication区别
QCoreApplication定义在core模块中,为应用程序提供了一个非gui的事件循环;
QGuiApplication定义在gui模块中,提供了额外的gui相关的设置,比如桌面设置,风格;
QApplication定义在widgets模块中,是QWidget相关的,能设置双击间隔,按键间隔,拖拽距离和时间,滚轮滚动行数等
命令行:QCoreApplication
widgets 相关:QApplication
qml:QGuiApplication