qlist<qvariant>怎么转换成 int

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qlist<qvariant>怎么转换成 int相关的知识,希望对你有一定的参考价值。

void Cell::setData(int role, QVariant &value) Cell::setData(role,value); 程序段应该调用父类的setData成员函数,你让setData调用自己显然有 参考技术A QList<QVariant> lt;
lt[0].toInt();

如何在 QJSEngine 中注册 QList<quint64> 之类的类型?

【中文标题】如何在 QJSEngine 中注册 QList<quint64> 之类的类型?【英文标题】:How to register types like QList<quint64> in QJSEngine? 【发布时间】:2019-09-15 06:04:28 【问题描述】:

我在我的 Qt 应用程序中使用 QJSEngine 编写脚本。我的 C++ 函数之一返回 QList&lt;quint64&gt; 类型,我需要从 javascript 调用它。调用它没有错误。但是,它返回 QVariant(QList&lt;qulonglong&gt;) 而不是预期的整数列表。在 C++ 中定义为返回 QList&lt;int&gt; 的另一个函数在 javascript 中可以正常工作,返回整数列表。我查看了QJSEngineQJSValue 的文档,并没有找到解决此问题的提示。附: quint64 本身也可以正常工作 - 只是它们的列表不起作用。

【问题讨论】:

JS 不支持 U64:***.com/questions/9643626/… 你没有提到 QML,但你可以像这样创建自己的类:***.com/questions/23781083/64-bit-integers-in-qml 那里发生的事情(很可能)是 Qt 是由于没有原生 JS 类型,因此将 U64 转换为变体列表。 【参考方案1】:

您应该改用 QVariantList。 QVariant 支持 qlonglong 和 qulonglong,与 qint64 和 quint64 相同。

QList<qlonglong> list;

或转换:

QVariant v(list);
QVariantList vlist = v.toList();

【讨论】:

这就是 Qt 已经为他做的事情(将列表包装在 QVariant 中)。关键是在 JS/ECMA 中没有任何 64b 整数的本机转换,无论是否有符号。 (有新的“Int64/UInt64 类型,但实际上是字节数组左右,Qt 不支持这些),所以没有内置的 Qt 辅助类将这些类型的数组转换为 JS 对象。AFAIK 没有办法添加自定义容器,除了通过专用类(具有值访问器方法的 QObjects/Gadgets,例如QQmlListProperty)。

以上是关于qlist<qvariant>怎么转换成 int的主要内容,如果未能解决你的问题,请参考以下文章

QT快速读取Excel

如何清理复杂的 QList?

如何在 QJSEngine 中注册 QList<quint64> 之类的类型?

QVariant.toXXX 函数的函数指针

将 QList<std::string> 转换为 QList<QString>

将函数返回从“std::vector<QString>”转换为“QVariant”