Qvariant包装指针在QML中变为null
QVariant wrapped pointers turn to null in QML
当指针值超越C 和QML世界之间,似乎出了问题。我使用普通的旧fromValue()
和value()
来转换为void *
,并且只要变体留在C 方面,它确实可以正常工作。
返回QML的那一刻,现在就解散到null
,并且当传递回C 时,变体类型从void *
更改为std::nullptr_t
,值为NULL。
returning 0x3ba5b10 // created
converting to qvariant 0x3ba5b10 // converting
converted QVariant(void*, 0x3ba5b10) 0x3ba5b10 // now variant, testing value() - all good
qml: null // in qml
received QVariant(std::nullptr_t, (nullptr)) 0x0 // back in c++
我正在使用:
Q_DECLARE_METATYPE(void*)
qRegisterMetaType<void*>();
关于这里发生了什么的任何线索?
编辑:它更加奇怪,我通过将指针值施放到64位UINT和返回,但是在过渡到QML时,类型INFO被弄乱了,在C 中,变体是类型qulonglong
的。,从QML到达现在是double
,因此怀疑它可能会绕过某些东西并弄乱指针值。
编辑2:请注意,问题不是要推荐实践,而是要在达到QML之前预期和观察到的原因。
您不需要注册void*
,而是使用metatype qmetatype :: voidstar。
请注意,要注册Metatype SomeCustomType*
,您需要使用别名。
using SomeCustomTypePtr = SomeCustomType*;
Q_DECLARE_METATYPE(SomeCustomTypePtr)
qRegisterMetaType<SomeCustomTypePtr>();
甚至无法进行此类声明?
根据q_declare_metatype上的官方文档(类型(:
此宏使
QMetaType
类型CC_12提供了公共默认构造函数,公共拷贝构造函数和公共驱动器。需要将类型Type
用作QVariant
中的自定义类型。此宏要求该类型是在使用时的完全定义类型。
听起来很奇怪,至少在C 部分中起作用。
您是否认为声明您的类型指针而不是void*
?
相关文章:
- 从C++实例化QML
- 使用CMake创建QML插件
- QT通过C++添加映射QML项目
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 如何在没有信号的情况下从C++执行QML插槽
- 如何在 c++ 中'NULL'字符串
- QML按钮点击功能执行顺序
- c++使用foreach使数组为null
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 建议在运行时将带有类实例的列表从c++导入qml
- 当使用通配符和null指针调用函数时,对输出的说明
- Qt Quick-如何仅从c++代码与qml属性交互
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 如何在映射中返回null
- 如何将带有自定义对象的容器从C++传递到QML
- QML 使用带有参数C++函数
- 为什么返回 NULL 不会破坏函数?
- Qvariant包装指针在QML中变为null
- QML和C++中的Null和Undefined
- 在QML中将null分配给C++类型的QObject*属性时断言失败