QVariants 키를 사용하여 데이터 구조를 만들려고합니다. 그것은 다음과 같습니다qvariant를 키로 사용
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' include 앞에 함수 정의를 넣으십시오. –
컴파일하는 데 문제가 없습니다. QHash, QVariant> _shapes; –
asclepix
@asclepix 실행중인 Qt 버전은 무엇입니까? 4.8이나 5.0에서'qHash (QVariant) '를 볼 수 없습니다. – cmannett85