直入主题,主要记录C++和QML混合编程的方式以及相关函数的用法。

一:int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)

工程文件:

qml和C++类的交互方法_qml与c++混合编程

customquck.h

qml和C++类的交互方法_qml_02

customquck.cpp

qml和C++类的交互方法_qml与c++混合编程_03

main函数:

qml和C++类的交互方法_qt_04

qml写法:

qml和C++类的交互方法_qml与c++混合编程_05

运行结果:

qml和C++类的交互方法_qt_06

把main函数的注册函数稍做修改:

 

再次运行发现抱错:

qml和C++类的交互方法_qml_07

修改main.qml

qml和C++类的交互方法_qt_08

再次运行:

qml和C++类的交互方法_qml_09

发现也是可以正常运行的。

查看了源码发现:

qml和C++类的交互方法_qt_10

 

第二种方法:

qml和C++类的交互方法_qml_11

 

qml和C++类的交互方法_qt_12

调用结果:

qml和C++类的交互方法_qml_13

单击一次后,显示字符串。

 

两种比较:

两种方法的区别

    (1) 方法1需要创建实例才能使用,而方法2则是只有一个全局实例,在setContextProperty就已经创建了;

    (2) 方法1学要在qml的import导入, 如下例(CustomQuck为注册的字符串,1.0为注册定义的版本号);

          import com.lsy.customquick 1.0

    (3) 方法1生命周期在本页面,方法2生命周期是全局;

  (4)方法1注册的字符串第一个字母必须为大写。要不然会报错。