如何将unsigned long int转换为QVariant



我已经意识到QVariant不提供longunsigned long的功能。它提供了int, unsigned int, long longunsigned long long的转换。

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

如果我想在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

相关内容

  • 没有找到相关文章

最新更新