[英]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.