问题标签 [qvariant]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 从 QSettings 读取自定义元类型数组
我从 QSetting 读取自定义元类型数据时遇到问题。我有一堂课:
重载:
在程序开始的某个地方我打电话:
为了读写,我使用了两个功能:保存工作正常,我保存的所有数据都出现在设置文件中。
此功能的问题,它的加载计数正确,但它正在加载空的默认构造项。
我将其重写为新项目进行测试,但它工作正常。我花了两个小时来找出为什么这个变体能正确读取数据但第一个变体不能。第一个变体的所有者正确转换。甚至两个变体中的设置文件中的数据也相同。
也许您可以在此变体中发现使用 QSettings 的不同之处?
c++ - 从 QSettings 派生并存储 QIcon
我尝试使用派生自 QSettings 的类存储 QIcon,如下所示:
setValue("fancy_icon", QIcon::fromTheme("document-new"));
但我有一个错误:
QVariant::save: 无法保存类型 69。
它不起作用。令人惊讶的是,如果我只是构造一个 QSettings 实例并保存 69 个类型(QIcon)元素中的任何一个 - 它工作正常。
问题是 - 为什么现在它起作用了?我怎样才能做得更好?
c++ - QVariant 到 QIcon/QPixmap/QImage
我想提取存储在 QTreeWidget 列之一中的 QIcon,作为 Qt::DecorationRole。
但是,我只能以 QVariant 的形式获取数据,并且找不到将 QVariant 转换为 QIcon 的函数。有可能做到吗?
c++ - 从无序数据构建 QVariant 列表
我有这组数据:
我想转换为 QVariant,如下所示:
我想应该是这样的:
但是对于数组,我需要对数据进行排序;params["steps"]
这意味着我应该在第 1 步和第 3 步之前插入第 0步(第 2 步应该为空)。
此外,对输入数据进行排序不是一种选择。
我尝试使用以下代码来实现这一点:
但是当遇到这一行时,代码在某些时候失败,索引超出范围:
所以我猜我的“用空地图填充”循环以某种方式失败了。我该怎么办?
qt - qvariant 作为 qhash 中的键
我想创建一个带有 QVariants 键的数据结构。它看起来像这样:
不幸的是,“没有调用'qHash(const QVariant&)'的匹配函数”。
所以我为 QVariants 定义了我自己的 qHash 实现:
但是随后编译器说,该方法被定义了多次。
那么,如何使用 QVariant 作为 QHash 中的键呢?或者:我做错了什么?
c++ - 如何将 VARIANT* 与 dynamicCall 一起使用?
我正在尝试使用 COM 对象,但参数类型 VARIANT* 有问题。我可以很好地使用 COM 对象的功能,除非它们具有这种类型的参数。
generateDocumentation 生成的文档是:
QVariantList 参数 = ...
object->dynamicCall("GetRanges(int,int,int&, QVariant&)", params);
根据COM对象提供的文档,参数的类型应该是LONG、LONG、LONG*和VARIANT*,准确的说VARIANT*是指向包含BSTR数组的VARIANT的指针。
我通常应该能够检索第三个和第四个参数(类型为 LONG* 和 VARIANT*),并且函数不使用它们的值。
这是我的代码(a 和 b 是 int 先前初始化的):
现在使用该代码,我得到的只是一个错误 QAxBase: Error calling IDispatch member GetRanges: Unknown error,这不是很有帮助。
我试图改变一些事情,并通过使用以下代码设法取得进展(某种程度):
它摆脱了错误,最后 i 的值是正确的,但 sl 仍然是空的。我知道它不应该,因为我有一个 C# 中的示例演示可以正常工作。
因此,如果有人对如何使它起作用有任何想法...
不然我看了一圈,发现也可以查询接口直接使用,但是我不是很懂,不知道能不能解决我的问题。
我在 Windows7 64 位平台上,我使用 msvc2012 作为编译器。我现在正在使用 Qt 5.1.0,但它在 5.0.2 中也不起作用。
c++ - QT - 如何从组合框中检索 QVariant 值?
我正在使用 QVariant 将对象存储在 Qcombobox 内,这似乎工作正常。这是实现代码:
将类型添加到标题中的 QVariant:
pDiscRecorder 转换为 CDiscRecorder:
然后存储在组合框中
当我尝试将其拉出时出现问题:
我收到错误:
我尝试在错误代码中实现提示无济于事,我已经按照线程在 Qt 的组合框中添加 QObject来实现此行为,如何才能找回我的对象?
谢谢
qt - 使用 QSettings 保存 64 位整数
有没有什么巧妙的方法,除了将数字转换为QByteArray
,来保存quint64
吗QSettings
?问题是QVariant
不接受qint64
也不quint64
。
c++ - 迭代作为 QList 的 QVariant?
我正在使用 QObject 的动态属性来存储要在可以访问所述属性的 Slot 中使用的信息。发件人是一个 QState,具有:myQState->setProperty("key", QList<int>(0, 1, 2));
我想将存储的QVariant转换回 QList 以便可以对其进行迭代。以下代码不起作用(错误 C2440:QVariant 无法使用 {[T=int] 转换为 QList):
此代码有效。要设置为属性的对象:
并且在插槽中
c++ - 通过 QDataStream 序列化 QVariant
我可能写错了,但这是我试图执行的代码,但它没有达到预期的效果:
鉴于 QVariant 类的文档中的示例:
http://qt-project.org/doc/qt-5.1/qtcore/qvariant.html#type
它应该将值 123 正确序列化到 QByteArray 但不这样做,而是只写出:
有人知道如何解决这个问题吗?
编辑
好吧,也许不清楚,但这是最初的问题:
我可能在 QVariant 中存储了任何 QVariant 内置类型,例如 QStringList、QString、double、int 等。
我想要的是一种将 QVariant 序列化为字符串并恢复它的方法,而无需自己为每种类型执行此操作。据我所知,QVariant::toString() 方法不适用于通过 QVariant 接受的所有类型,我认为通过 QDataStream 传递可以传递给我 QVariant 的序列化版本。
编辑 2
感谢 piotruś 的回答,我能够回答我的问题。这是程序: