gpt4 book ai didi

c++ - QVariant 包装指针在 QML 中变为 null

转载 作者:行者123 更新时间:2023-11-30 01:34:30 33 4
gpt4 key购买 nike

当指针值跨越 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 时,类型信息变得困惑,在 C++ 中,变体的类型是 qulonglong,从 QML 返回它现在是一个 double,因此怀疑它可能会舍入某些东西并弄乱指针值。

编辑 2:请注意,问题不是关于推荐做法,而是关于为什么这在达到 QML 之前没有按预期和观察到的那样工作。

最佳答案

您不需要注册 void*,而是使用元类型 QMetaType::VoidStar .

请注意,要注册元类型SomeCustomType*,您需要使用别名。

using SomeCustomTypePtr = SomeCustomType*;
Q_DECLARE_METATYPE(SomeCustomTypePtr)
qRegisterMetaType<SomeCustomTypePtr>();

关于c++ - QVariant 包装指针在 QML 中变为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56167406/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com