qml Q_INVOKABLE QObject* 程序崩溃问题

1,655次阅读
没有评论

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 方式后问题解决.

正文完
 0
评论(没有评论)