我意识到QVariant不提供long
和unsigned long
的功能。它提供转化为int
,unsigned int
,long long
和unsigned long long
。
我们可以在当前的桌面架构中找到long
和int
是等效的,但它们不是从理论的角度出发的。
如果我想在long
中存储QVariant
,我有义务首先将值转换为long long
。我想知道是否还有其他方法可以解决这个问题。
其次,我有兴趣知道更好/更简单的方法。即使用更简单的代码,避免使用不必要的空间或指令。
答案 0 :(得分:3)
根据问题标题,主题启动器很可能已从编译器收到以下错误消息:
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)
这对我有帮助。
答案 1 :(得分:1)
如果我想在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;
}
答案 2 :(得分:1)
此问题与设计QVariant类无关。但这是长型的问题。
long类型更改但int(4)或long long(8)在所有LLP64 / IL32P64 LP64 / I32LP64中与wikipedia注释相同。
祝你好运 /穆罕默德建议:如果您对整数类型有重要意义 在所有英特尔平台上大小相同,然后考虑将“长”替换为 “int”或“long long”。 “int”整数类型的大小为4 字节和“long long”整数类型的大小为8字节 上述操作系统和架构的组合。