12

QVariant がlongおよびの機能を提供していないことに気付きましたunsigned longintunsigned intlong longおよびへの変換を提供しますunsigned long long

long現在のデスクトップ アーキテクチャではとintが同等であることがわかりますが、理論的な観点からはそうではありません。

longaを aに格納したい場合はQVariant、最初に値を に変換する必要がありますlong long。これを克服する他の方法があれば知りたいです。

第二に、それを行うためのより良い/より簡単な方法を知りたいです。つまり、より単純なコードを使用し、不要なスペースや命令の使用を避けます。

4

3 に答える 3

2

longaを 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 でウィキペディアの注として同じです。

インテル デベロッパー ゾーンは次のように言います。

提案: 整数型がすべての Intel プラットフォームで同じサイズであることが重要な場合は、"long" を "int" または "long long" に置き換えることを検討してください。上記のオペレーティング システムとアーキテクチャのすべての組み合わせで、"int" 整数型のサイズは 4 バイト、"long long" 整数型のサイズは 8 バイトです。

がんばれ
/ モハメド

于 2014-06-17T10:20:41.823 に答える