首页 » QT » 正文

qml Q_INVOKABLE QObject* 程序崩溃问题

QML与C++直接交互有两种:Q_INVOKABLEQ_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方式后问题解决.

发表评论