Использование QGraphicsItem в качестве ключа для QHash

Прежде чем я начну использовать этот тип данных и поскольку я новичок в Qt, возможно ли использовать QGraphicsItem в качестве ключа QHash? Кажется законным объявить что-то вроде:

QHash<QGraphicsItem*, someType> hashName;

Так что я думаю, что это что-то разрешено.

Спасибо.


person Francesco    schedule 24.03.2014    source источник
comment
Да, все в порядке. Обратите внимание, что когда вы удаляете графический элемент, вы должны вручную удалить указатель на него из хэша.   -  person Pavel Strakhov    schedule 24.03.2014
comment
Спасибо. Это имеет смысл сделать, поскольку я предполагаю, что ключ представляет собой просто число, а не указатель области.   -  person Francesco    schedule 24.03.2014


Ответы (1)


да. Но я бы использовал QMap<QGraphicsItem*, someType>, хотя это не имеет большого значения. Кроме того, вы можете наследовать QGraphicsItem для прикрепления данных к элементам.

person mugiseyebrows    schedule 24.03.2014
comment
Здесь нет смысла использовать QMap: поиск по ключу медленнее в QMap, а упорядочивание по указателю не имеет никакого смысла. Также возможно присоединение данных к элементам через QGraphicsItem::setData без подкласса QGraphicsItem. - person Pavel Strakhov; 24.03.2014
comment
Я думал, что использование хэша требует вычисления хэша ключа при доступе, повторении и вставке значений (в реализации QHash за кулисами). Или хэширование int/pointer как-то оптимизировано? - person mugiseyebrows; 25.03.2014
comment
Хеширование указателей тривиально и выполняется в Qt как reinterpret_cast<quintptr>(key) ^ seed. - person Pavel Strakhov; 25.03.2014