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<quint64>
类型,我需要从 javascript 调用它。调用它没有错误。但是,它返回 QVariant(QList<qulonglong>)
而不是预期的整数列表。在 C++ 中定义为返回 QList<int>
的另一个函数在 javascript 中可以正常工作,返回整数列表。我查看了QJSEngine
和QJSValue
的文档,并没有找到解决此问题的提示。附: 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的主要内容,如果未能解决你的问题,请参考以下文章
如何在 QJSEngine 中注册 QList<quint64> 之类的类型?