问题标签 [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.

0 投票
1 回答
2236 浏览

qt - QVariant 如何在内部工作?

我想知道,QVariant 如何在内部存储,int,QMap,QList,...

我的意思是什么是内部数据结构/实现?在 QVariant 中存储和检索类型(int、float)的开销是多少?

0 投票
2 回答
5406 浏览

c++ - 什么是 QVariant,什么时候应该使用它?

什么是 aQVariant以及何时应该使用它?

0 投票
4 回答
8283 浏览

c++ - QVariant 只接受 QList 而不是 QVector 也不是 QLinkedList 有什么原因吗

QVariant似乎接受QList<QVariant>,而QVector<QVariant>不是QLinkedList<QVariant>。仅仅是因为它看到了QListQVector并且QLinkedList是基本相似(在抽象意义上)的数据结构吗?

我正在添加和std::vector到一个QVariant. 如果只使用 Qt API 而不是手动转换,则需要两次转换:

  1. std::vectorQVector
  2. QVectorQList

PS:我知道我可以直接添加std::vector这个,但我相信在这种情况下它不会知道它是对象的向量。QVariant

0 投票
2 回答
3546 浏览

qt - 如何调用“QListQVariant::toList () const"

这是一个非常简单且可能很愚蠢的问题,但我忘记了如何使用QList QVariant::toList () const

当然这是错误的,正确的出路是什么?:脸红:

0 投票
1 回答
1494 浏览

qt - Qt枚举比较并输出到QDebug

我正在向 Qt 元对象系统注册枚举。我已经仔细检查了所有这些都具有元类型 ID,并且一切看起来都很完美。但是我对这些比较有一些未解决的问题。

让我们考虑这个用于填充组合框的代码:

效果很好,我的列表中填充了我的枚举的人类可读文本。

现在,我正在尝试使用包含枚举值的 QVariant 设置列表显示的初始值:

这段代码不起作用。我必须通过以下方式替换测试:

这样就可以了。

谁能解释我如何在 QVariants 中比较我的自定义枚举?还是在创建用作列表的用户数据的 QVariant 时我做错了什么?

此外,如果我尝试 qDebug() 在循环中创建的 QVariants 以填充列表,我会得到空值输出。例如,在第一段代码中生成的输出如下所示:

如您所见,该值未正确输出...您能帮我找出原因吗?

谢谢你,皮埃尔。

0 投票
2 回答
79 浏览

unit-testing - 使用 QVariant 进行单元测试

我想对返回 qvariant 的函数进行单元测试,以确保 qvariant 是否持有正确的值 请给我一些想法,我应该如何进行?

0 投票
2 回答
1507 浏览

qt - QVariantMap 在析构函数中崩溃

我正在使用 Qt 构建一个 JSON 对象,并使用 QJson 将其转换为 QString。这(通常)可以正常工作,并且在这种情况下可以正常工作,但是在我的 Qt 数据结构的析构函数中,它会因访问冲突而崩溃。对象构建良好,它通过我的网络连接发送,函数结束后,我的应用程序崩溃。

我的代码如下所示:

如果我删除建立起来的内部循环,entryList一切正常。似乎析构函数data无法删除内容,但我不知道,为什么。整个数据结构在序列化时似乎很好(我希望 QJson 不会更改给定数据中的任何内容)但无法清理它。

最好的问候,托拜厄斯

0 投票
1 回答
1182 浏览

c++ - Qt QMap.insert() 失败

我有一个 levelObjects 对象,它是 QMaps 的 QVariants 的 QList:

后来,当我尝试更改其中一个 QMap 中某些内容的值时,它似乎没有做任何事情:

产生:

遍历有问题的代码行(带有 .insert() 的代码行),我可以看到它经历了一堆与 QVariants 相关的汇编子例程,然后经历了 QMap::insert(),然后是更多的汇编。我最初的想法是,这可能触发了某种信号,导致其他地方的代码被执行,但事实并非如此。

有什么想法吗?

编辑:我通过一种解决方法解决了这个问题 - 摆脱了中间 QVariant 并使 levelObjects 成为 QMaps 的 QList。但是,我仍然很好奇是否有人对为什么会发生这种情况有任何见解。

0 投票
1 回答
8549 浏览

qt - 将 QVariant 转换为 QStringList

我在调用函数时存储QStringList在一个变量中。现在我想从变量中恢复这些数据。怎么做? QVariantsetDataQVariant

编辑:我试过转换,但我似乎不明白它是如何工作的。

0 投票
1 回答
1268 浏览

qt - 将 QStandardItemModel 转换为 QVariant

我正在尝试将 QStandardItemModel 派生对象发送到 PythonQt,但我对如何发送它有点困惑。当我使用 boost::python 时,我有几个控件,比如 boost::noncopyable,以确保我没有重新创建这个对象,而是与 python 共享它。我还有一些构造可以从 python 内部提供一个指向 python 的 boost 共享指针。

class Scene : public boost::enable_shared_from_this<Scene>, public QStandardItemModel

但是,在 PythonQt 中,我不确定有什么可用的。该函数call为所有函数参数采用 QVariantList。

QVariant PythonQt::call(PyObject* object, const QString &callable, const QVariantList &args = QVariantList))

我现在很困惑的是如何通过 QVariant 将我的对象传递给 python。由于它是从 QStandardItemModel 派生的,我认为它已经注册了

但这给了我以下错误:

'qt_metatype_id' : is not a member of 'QMetaTypeId<MyObject>'

我在声明我的班级后尝试注册它,但这会引发不同的错误。

我实际上得到了两次错误——一次是在我添加 Q_DECLARE_METATYPE 的标题中,另一个是另一个标题,它有一个始终派生自 QStandardItemModel 但在其他方面无关的类。

Q_DECLARE_METATYPE 甚至是将此对象转换为 QVariant 的正确方法吗?

BOOST_PYTHON_MODULE(场景) { class_("场景"); }