QGraphicsView :: itemAt()方法始终返回零

时间:2014-05-22 15:57:37

标签: c++ qt qgraphicsview qgraphicsitem qgraphicsscene

我在 QGraphicsScene QGraphicsView 中有一些自定义 QGraphicsItems
我想知道在给定(x,y)坐标的视图中是否有一个Item。

为了测试目的,我使用以下类作为QGraphicsScene:

class CustomScene : public QGraphicsScene
{
protected:
    void mousePressEvent(QGraphicsSceneMouseEvent *event)
    {
        if (QGraphicsItem *item = itemAt(event->scenePos())) {
            qDebug() << "You clicked on item" << item;
        } 
        else {
            qDebug() << "You didn't click on an item.";
        }
    }
};  

在我的申请中,我有:

  • 一个类&#34; Screen :: Screen(QWidget * parent):QWidget(parent){...}&#34;在我的班级内部&#34; CustomScene:public QGraphicsScene {...}&#34;如上所述和类 QGraphicsView 的实例。
  • 我班级的一些实例&#34; Rect:public QGraphicsRectItem {...}&#34;,添加到QGraphicsView中,经过一些计算后绘制了一些矩形。

当我启动应用程序并单击绘制的矩形时,我总是有#34;您没有点击某个项目。&#34;信息。

在以前的帖子中搜索或在谷歌上搜索我没有找到我的代码无法正常工作的原因。我做错了什么?

编辑1:boundingRect()方法正确返回。我尝试添加一些 QGraphicsRectItem ,itemAt()方法正确地返回它们的信息。

1 个答案:

答案 0 :(得分:0)

问题是我没有覆盖QPainterPath QGraphicsItem::shape () const [virtual]方法 完成后, itemAt()方法开始按预期工作。