首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >qvariant作为qhash中的键

qvariant作为qhash中的键
EN

Stack Overflow用户
提问于 2013-06-20 16:29:35
回答 1查看 3.3K关注 0票数 4

我想创建一个带有QVariants a键的数据结构。它看起来是这样的:

代码语言:javascript
复制
QHash<QPair<QVariant, QVariant>, SHAPES::Shape* > _shapes;

不幸的是,“没有匹配的函数来调用‘qHash(const QVariant&)’”。

因此,我为QVariants定义了自己的qHash实现:

代码语言:javascript
复制
#pragma once

#include <QVariant>
#include <QHash>

uint qHash( const QVariant & var )
{
    if ( !var.isValid() || var.isNull() )
        //return -1;
        Q_ASSERT(0);

    switch ( var.type() )
    {
        case QVariant::Int:
                return qHash( var.toInt() );
            break;
        case QVariant::UInt:
                return qHash( var.toUInt() );
            break;
        case QVariant::Bool:
                return qHash( var.toUInt() );
            break;
        case QVariant::Double:
                return qHash( var.toUInt() );
            break;
        case QVariant::LongLong:
                return qHash( var.toLongLong() );
            break;
        case QVariant::ULongLong:
                return qHash( var.toULongLong() );
            break;
        case QVariant::String:
                return qHash( var.toString() );
            break;
        case QVariant::Char:
                return qHash( var.toChar() );
            break;
        case QVariant::StringList:
                return qHash( var.toString() );
            break;
        case QVariant::ByteArray:
                return qHash( var.toByteArray() );
            break;
        case QVariant::Date:
        case QVariant::Time:
        case QVariant::DateTime:
        case QVariant::Url:
        case QVariant::Locale:
        case QVariant::RegExp:
                return qHash( var.toString() );
            break;
        case QVariant::Map:
        case QVariant::List:
        case QVariant::BitArray:
        case QVariant::Size:
        case QVariant::SizeF:
        case QVariant::Rect:
        case QVariant::LineF:
        case QVariant::Line:
        case QVariant::RectF:
        case QVariant::Point:
        case QVariant::PointF:
            // not supported yet
            break;
        case QVariant::UserType:
        case QVariant::Invalid:
        default:
            return -1;
    }

    // could not generate a hash for the given variant
    return -1;
}

但是编译器会说,这个方法被定义了多次。

那么,如何在QHash中使用QVariant作为键呢?或者:我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2013-06-20 21:20:56

您的qHash实现似乎放在一个头文件中。您需要在头文件中声明它,而不是实现:

代码语言:javascript
复制
uint qHash( const QVariant & var );

实现应该放在各自的源文件中。

还要注意,qHash()声明应该放在#include <QHash>之前。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17208813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档