QtQuick/QML 坑记录

Q_INVOKABLE 自动释放指针

QML与C++直接交互有两种:Q_INVOKABLE与Q_PROPERTY,
Q_INVOKABLE允许qml直接调用c++类里的成员函数,而Q_PROPERTY可以让QML直接访问C++的类成员变量.
Q_INVOKABLE方式QML引擎会获得所有权,然后一旦使用完后他就释放内存,所以通过
Q_INVOKABLE返回一个指针的方式可能会导致该指针变野指针.所以如果是指针类型数据,则还是使用Q_PROPERTY,因为Q_PROPERTY在QML中使用后并不会释放它
总结:如果你是栈变量,既不是new出来的,通过Q_INVOKABLE返回指针给QML使用,如QAbstractListModel,QML用完就给你释放了,直接程序就会崩溃。因为这个栈变量生命周期就错乱了。可以改成Q_PROPERTY
方法1 QQmlEngine::setObjectOwnership(&listModel, QQmlEngine::CppOwnership); 强制必须CPP管理生命周期
方法2 使用Q_PROPERTY

Q_INVOKABLE 修饰函数不能在构造函数中使用,因为反射没完成,会导致奇奇怪怪错误

Q_INVOKABLE 返回自定义,需要注册自定义qRegisterMetaType<MapModel*>(“MapModel*”);

windows QtQuick 闪频

换成opengl渲染引擎

QML 透明图层,层次错乱

手动指定z,只有半透明图层会错乱

QObject继承的对象不允许拷贝

每个 QObject 对象都可能有一个父对象和多个子对象,以及信号和槽的连接。如果允许复制 QObject,将会复杂化这些关系的管理。例如,复制一个对象时,复制的对象是否应该连接到原对象的信号和槽?复制的对象的子对象应该如何处理?为了避免这些复杂性,Qt设计中决定不允许复制 QObject。
方法:使用指针放到数组里面

QObject继承的对象new出来无法正确删除

不要在继承了QObject的构造函数里面做多余的动作! 原因不知道!

QML Clip属性bug

  • 现象1 如果ListView的header中有clip属性和ListView的clip属性都存在,header会失效。会根据渲染引擎不同,如windows下openGL渲染引擎必现。
  • 现象2:其他clip属性重复,如parent有clip自己也有clip就会出错
    clip不要功能重复。ListView中把header中的clip删除。换其他方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值