12

我意识到 QVariant 不提供long和的功能unsigned long。它提供到intunsigned intlong long的转换unsigned long long

我们可以在当前的桌面架构中找到longint是等价的,但它们不是从理论的角度来看的。

如果我想将 a 存储long在 aQVariant我有义务首先将值转换为long long. 我想知道是否有其他方法可以克服这个问题。

其次,我有兴趣知道更好/更简单的方法。即使用更简单的代码,并避免使用不必要的空间或指令。

4

3 回答 3

9

主题启动器很可能(根据问题标题)从编译器收到以下错误消息:

    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)

这对我有帮助。

于 2020-05-05T20:01:47.937 回答
2

如果我想将 a 存储long在 a 中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;
 }
于 2014-06-17T09:20:37.803 回答
1

这个问题与设计 QVariant 类无关。但这是长类型的问题。

long 类型更改,但 int (4) 或 long long (8) 在所有 LLP64/IL32P64 LP64/I32LP64 中与维基百科注释相同。

英特尔开发者专区说:

建议:如果整数类型在所有英特尔平台上具有相同的大小对您很重要,则考虑将“long”替换为“int”或“long long”。对于上述所有操作系统和体系结构的组合,“int”整数类型的大小为 4 个字节,“long long”整数类型的大小为 8 个字节。

祝你好运
/穆罕默德

于 2014-06-17T10:20:41.823 回答