我意识到QVariant不提供以下功能。long
和 unsigned long
. 它提供转换为 int
, unsigned int
, long long
和 unsigned long long
.
在目前的桌面架构中,我们可以发现 long
和 int
是等价的,但从理论上看,它们并不等同。
如果我想存储一个 long
在...中 QVariant
我有义务首先将数值转换为 long long
. 我想知道是否有其他方法可以克服这个问题。
其次,我很想知道有什么更简单的方法可以做到这一点。即使用更简单的代码,避免使用不必要的空间或指令。
很有可能(根据问题标题),话题发起人收到了来自编译器的以下错误信息。
error: conversion from ‘uint64_t {aka long unsigned int}’ to ‘QVariant’ is ambiguous
没有一个建议的答案提供了一个简单的解决方案.所以,代替隐式转换的是一个值,类似于
QVariant_value = long_unsigned_int_value;
试试下面的方法。
QVariant_value = QVariant::fromValue(long_unsigned_int_value)
这对我有帮助
如果我想存储一个 long
在...中 QVariant
,我有义务首先将数值转换为 long long
.
QVariant store (unsigned long int input) {
unsigned long long data = (unsigned long long) input;
QVariant qvariant( data );
return qvariant;
}
unsigned long int load (const QVariant& qvariant) {
bool ok;
unsigned long int data = (unsigned long) qvariant.toULongLong(&ok);
if (ok)
return data;
else
return NAN;
}
这个问题与设计的QVariant类无关,但这是长类型的问题,在所有的LLP64IL32P64 LP64I32LP64中,长类型改变了,但int(4)或long long(8)是一样的。
长类型改变了,但int(4)或long long(8)在所有LP64IL32P64 LP64I32LP64中都是一样的。维基百科 注。
英特尔开发者区 说
建议。 如果你认为整数类型在所有英特尔平台上都有相同的大小,那么可以考虑将 "long "替换为 "int "或 "long long"。对于上述所有操作系统和架构的组合,"int "整数类型的大小是4个字节,"long long "整数类型的大小是8个字节。
祝你好运,Mohamed