我已经意识到QVariant不提供long
和unsigned long
的功能。它提供了int
, unsigned int
, long long
和unsigned long long
的转换。
我们可以发现在当前的桌面架构中,long
和int
是等价的,但它们不是从理论的角度来看。
如果我想在QVariant
中存储long
,我有义务首先将值转换为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)
如果我想在QVariant
中存储long
,我有义务首先将值转换为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类无关。但这是长类型的问题。
除了int(4)或long long(8)在所有LLP64/IL32P64 LP64/I32LP64中都是相同的类型
Intel Developer zone say:
建议:如果整型需要在所有英特尔平台上相同的大小,然后考虑将"long"替换为要么是"int"要么是"long long"。"int"整型的大小为4字节和"long - long"整型的大小都是8字节以上操作系统和体系结构的组合
祝你好运
/Mohamed