【发布时间】:2015-07-19 22:06:10
【问题描述】:
我的代码在鼠标事件中调用items(event->pos()) 时成功返回QList<QGraphicsItem *>。代码如下所示:
QList<QGraphicsItem *> itemsList = items(event->pos());
qDebug() << itemsList;
鼠标事件的调试输出,其中两个对象相互重叠:
(QGraphicsItem(this =0x10ab8c900, parent =0x0, pos =QPointF(180, 0) , z = 0 , flags = ( ) ) ,
QGraphicsItem (this = 0x10159a800 , parent = 0x0 , pos = QPointF(180, 0) , z = 0 , flags = ( ) ) )
获取位置等非常好,但是有没有办法获取实际的对象实例?我看到带有内存地址的this 参数,所以我想我知道内存位置。但是我如何将它映射到一个对象?
我知道后一个 QGraphicsItem 实例的类型为Treasure *,我在从列表中获取它后尝试了一些方法,但似乎没有任何效果。这甚至可能吗?
【问题讨论】:
-
它是一个具有内存位置的对象,您可以通过它检索。你想用这个对象做什么?
-
我想调用它的getter方法来获取一个私有变量。我将如何检索对象?
-
我仍然不完全确定您的意思。对象存储在内存位置。您可以有一个本地对象,或指向存储在不同位置的对象的指针。您可以通过复制您拥有的对象来创建本地对象。但是,您可以对本地对象执行的操作没有区别。以及通过结构解除引用 (->) 访问的对象允许您做什么。
-
@laurisvr 我认为我们在同一页上。我想复制 QGraphicsItem 的
this参数中的对象。你能告诉我怎么做吗? -
这是个好问题。如果我是你,我只会将所有指向添加到场景中的对象模型的指针存储在一个列表中,你知道添加的对象的类型。并且只需循环 throw itemsList 以比较 itemsList 和我的 modelList 中的指针。