如何将无符号长整型转换为QVariant

13

我意识到 QVariant 不支持 longunsigned long 功能。它仅支持转换成 intunsigned intlong longunsigned long long

在当前的桌面架构中,我们可以发现 longint 是等价的,但从理论上来看它们并不是等价的。

如果我想将一个 long 存储在 QVariant 中,我必须先将值转换为 long long。我想知道是否有其他方法来克服这个问题。

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

3个回答

13

根据问题标题,很有可能主题发起者从编译器收到以下错误信息:

    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)

这对我有所帮助。


2
对于搜索引擎:这个答案也适用于错误信息“error: conversion from ‘long int’ to ‘const QVariant’ is ambiguous”。 - tanius

2

如果我想在QVariant中存储一个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;
 }

这是另一个问题还是您实际问题的细化?因为这里是提供答案的部分。 - isaias-b
好的,我有这个答案,所以我想知道是否有其他方法来克服这个问题。我认为这是一个改进。例如,我可以通过将数据转换为QString来克服这个问题,在那里我有将ulong转换的功能,但我认为那会更加复杂。谢谢。 - Antonio
所以请将所有属于问题的内容放在问题内,根据需要进行任何细化编辑。;) - isaias-b
1
自第二版以来,我没有再提出任何问题或在此答案中添加其他信息。所有相关信息都在问题中。为什么这个答案被投票删除?这里有什么问题吗? - Antonio

1
这个问题与设计QVariant类无关,而是关于long类型的问题。
在所有LLP64/IL32P64 LP64/I32LP64中,long类型转换为int(4)或long long(8)是相同的,正如wikipedia所述。 Intel Developer zone建议:
如果您希望整数类型在所有Intel平台上具有相同的大小,请考虑用int或long long替换long。 int整数类型的大小为4字节,long long整数类型的大小为8字节,适用于以上操作系统和架构组合。
祝你好运 / Mohamed

据我所知,long int通常为4字节长,但int的大小取决于平台(它可以存储在小于4个字节的空间)。然而,当前大多数桌面平台使用4字节(最小字长; 32b)来实现int。因此,我更喜欢使用long,根据标准定义可以允许更大的整数范围。无符号长整型:0至4294967295。 无符号整型:0至65535。谢谢Mohamed。 - Antonio
我认为你的第一条评论是错误的。看看我在帖子中放置的链接,特别是这里 - Mohamed Hamzaoui
抱歉,我不明白你的观点。你提供的链接显示long intint的大小不同。在64位字长的体系结构中,对于大多数类型,使用完整的字来表示变量是合理的。然而,较短的字长体系结构可能会使用更小的大小。大小最终取决于平台。据我所知,一个平台可以实现2个字节长的int,仍然符合标准C/C++(0-65535)。并非所有体系结构都是32位或64位。 - Antonio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接