gpt4 book ai didi

qt - qvariant 作为 qhash 的关键

转载 作者:行者123 更新时间:2023-12-04 13:15:21 24 4
gpt4 key购买 nike

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

QHash<QPair<QVariant, QVariant>, SHAPES::Shape* > _shapes;

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

所以我为 QVariants 定义了自己的 qHash 实现:
#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 作为键呢?或者:我做错了什么?

最佳答案

看来你的 qHash实现放在一个头文件中。您需要在头文件中声明它而无需实现:

uint qHash( const QVariant & var );

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

另请注意 qHash()声明应放在 #include <QHash>之前.

关于qt - qvariant 作为 qhash 的关键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17208813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com