QML与C++直接交互有两种:Q_INVOKABLE
与Q_PROPERTY
,
Q_INVOKABLE
允许qml直接调用c++类里的成员函数,而Q_PROPERTY
可以让QML直接访问C++的类成员变量.
Q_INVOKABLE
方式QML引擎会获得所有权,然后一旦使用完后他就释放内存,所以通过 Q_INVOKABLE
返回一个指针的方式可能会导致该指针变野指针.所以如果是指针类型数据,则还是使用Q_PROPERTY
,因为Q_PROPERTY
在QML中使用后并不会释放它
问题背景:
最近一个程序qml与c++交互用的是Q_INVOKABLE方式,后来发现程序偶尔crashed
,在debug模式下发现是Q_INVOKABLE
的一个QObject
指针跑飞掉了,当时并不知道什么原因引起,后来c++与qml数据交换改用json
方式后问题解决.
正文完