我想用QVariants鍵創建數據結構。它看起來像這樣:qvariant作爲qhash中的鍵
QHash<QPair<QVariant, QVariant>, SHAPES::Shape* > _shapes;
不幸的是,「呼叫沒有匹配函數‘qHash(常量的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;
}
但隨後的編譯器說,該方法被定義多次。
那麼,如何使用QVariant作爲QHash中的鍵?或者:我做錯了什麼?
嘗試在'QHash'包含之前放置函數定義。 –
我沒有問題編譯:QHash,QVariant> _shapes; –
asclepix
@asclepix你正在運行什麼版本的Qt?我無法在4.8或5.0中看到'qHash(QVariant)'。 – cmannett85