繁体   English   中英

如何在QString中使用QVariant :: fromValue?

[英]How to use QVariant::fromValue with QString?

我有以下代码:

QString* data = new QString("data to QML");
engine.rootContext()->setContextProperty(QStringLiteral("consoleText"), QVariant::fromValue(data));

并且此命令不起作用,QTCreator中的错误消息如下:

... \\ qglobal.h:693:错误:静态声明失败:类型未注册,请使用Q_DECLARE_METATYPE宏将其告知Qt的元对象系统#define Q_STATIC_ASSERT_X(Condition,Message)static_assert(bool(Condition) , 信息)

我不认为我应该对QString使用Q_DECLARE_METATYPE ,因为如果执行以下操作:

engine.rootContext()->setContextProperty(QStringLiteral("consoleText"), QVariant::fromValue(QString("data to QML")));

它工作正常。

我对如何将QVariant::fromValue()与预先声明的QString一起使用感兴趣。

QVariant::fromValue()需要一个QString ,而不是一个指向QString的指针。

另外,在堆上分配QString对象没有多大意义。 在底层, QString使用写时复制(COW)作为优化。 无论如何,存储在QString的实际数据将始终位于堆中。

data是指向QString的指针,而不是QString本身。 要使用QVariant::fromValue()方法,必须取消引用指针:

engine.rootContext()->setContextProperty(QStringLiteral("consoleText"), QVariant::fromValue(*data));
                                                                                            ^

这是因为QString *不是注册的元类型(默认情况下)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM