2014-03-24 37 views
0

在我开始使用这种数据类型之前,因为我是Qt的初学者,是否可以使用QGraphicsItem作为QHash的密钥?这似乎是合法的宣布像这样的:使用QGraphicsItem作为QHash的密钥

QHash<QGraphicsItem*, someType> hashName; 

所以我想这是允许的东西。

谢谢。

+0

是的,它非常好。请注意,当你删除一个图形项目时,你应该从哈希中手动删除指向它的指针。 –

+0

谢谢。这样做是有道理的,因为我猜测这个关键字只是一个数字,而不是区域指针。 – Francesco

回答

0

是的。但我会用QMap<QGraphicsItem*, someType>,但这并没有太大的区别。此外,您可以继承QGraphicsItem以将数据附加到项目。

+0

在这里使用'QMap'没有意义:在'QMap'中按键查找速度较慢,而按指针排序没有任何意义。还可以通过'QGraphicsItem :: setData'将数据附加到项目,而不需要创建'QGraphicsItem'子类。 –

+0

我认为使用散列需要在访问,迭代和插入值时计算密钥的散列值(在'QHash'实现中,在幕后)。或哈希int /指针优化莫名其妙? – mugiseyebrows

+0

散列指针是微不足道的,并在Qt中执行为'reinterpret_cast (key)^ seed'。 –