如何将一个无符号长的int转换成QVariant?

问题描述 投票:7回答:3

我意识到QVariant不提供以下功能。longunsigned long. 它提供转换为 int, unsigned int, long longunsigned long long.

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

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

其次,我很想知道有什么更简单的方法可以做到这一点。即使用更简单的代码,避免使用不必要的空间或指令。

long-integer qvariant
3个回答
2
投票

很有可能(根据问题标题),话题发起人收到了来自编译器的以下错误信息。

    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
投票

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

1
投票

这个问题与设计的QVariant类无关,但这是长类型的问题,在所有的LLP64IL32P64 LP64I32LP64中,长类型改变了,但int(4)或long long(8)是一样的。

长类型改变了,但int(4)或long long(8)在所有LP64IL32P64 LP64I32LP64中都是一样的。维基百科 注。

英特尔开发者区

建议。 如果你认为整数类型在所有英特尔平台上都有相同的大小,那么可以考虑将 "long "替换为 "int "或 "long long"。对于上述所有操作系统和架构的组合,"int "整数类型的大小是4个字节,"long long "整数类型的大小是8个字节。

祝你好运,Mohamed

© www.soinside.com 2019 - 2024. All rights reserved.