gpt4 book ai didi

qt - 带有自定义类指针的 QVariant 不返回相同的地址

转载 作者:行者123 更新时间:2023-12-04 13:35:02 26 4
gpt4 key购买 nike

我需要使用QQmlContext::setContextProperty()在qml中分配一个指向自定义类的指针。另一个qml对象具有相同类型的Q_PROPERTY以再次检索它。

一个简单的测试告诉我,该转换无法像我所想的那样工作。

#include <QCoreApplication>
#include <QDebug>
#include <QMetaType>

class TestClass
{
public: TestClass() { qDebug() << "TestClass()::TestClass()"; }
};

Q_DECLARE_METATYPE(TestClass*)

int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);

qDebug() << "metaTypeId =" << qMetaTypeId<TestClass*>();

auto testObject = new TestClass;
QVariant variant(qMetaTypeId<TestClass*>(), testObject);
auto test = variant.value<TestClass*>();

qDebug() << testObject << variant << test;

return 0;
}

这个小小的测试应用程序给了我这样的输出:
metaTypeId = 1024
TestClass::TestClass()
0x1b801e0 QVariant(TestClass*, ) 0x0

在将其转换为 QVariant之后,我真的很想再次获得相同的指针。稍后,我将其分配给qml上下文,然后对话必须正确进行。

最佳答案

这适用于我使用Qt 5.9:

#include <QVariant>
#include <QDebug>

class CustomClass
{
public:
CustomClass()
{
}
};
Q_DECLARE_METATYPE(CustomClass*)

class OtherClass
{
public:
OtherClass()
{
}
};
Q_DECLARE_METATYPE(OtherClass*)

int main()
{
CustomClass *c = new CustomClass;
OtherClass *o = new OtherClass;
QVariant v;
v.setValue(c);
QVariant v2;
v2.setValue(o);

qDebug() << v.userType() << qMetaTypeId<CustomClass*>() << v2.userType() << qMetaTypeId<OtherClass*>();
qDebug() << v.value<CustomClass*>() << c << v2.value<OtherClass*>() << o;

return 0;
}

和我得到的输出:
1024 1024 1025 1025
0x81fca50 0x81fca50 0x81fca60 0x81fca60

关于qt - 带有自定义类指针的 QVariant 不返回相同的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44501171/

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