1

我有一个应用程序,它根据汽车的不同数据绘制线条。我希望我的应用程序能够选择绘制的线条,然后在左侧的列表中选择相应的项目。问题是 mousePressEvent 仅在我按下场景最左侧四分之一的鼠标按钮时才被调用。当它被调用时,curveSelected() 函数也可以工作,但我不知道为什么我不能从场景的其他区域调用 mousePressEvent。

首先我有一个mousePressEvent。

void DrawingScene:::mousePressEvent ( QGraphicsSceneMouseEvent * event ){
    event->ignore();
    bool leftbutton = (event->button() == Qt::LeftButton);
    if(leftbutton)
    {
     qDebug() << "leftbutton";
     emit leftButtonPress(event->scenePos());
    }
    QGraphicsScene::mousePressEvent(event);
}

后来连接:

connect(d_scene, SIGNAL(leftButtonPress(QPointF)), this, SLOT(curveSelected(QPointF)));

leftButtonPress 是发出的信号。然后我有选择列表中项目的功能。这种方法似乎工作得很好。没有此功能也存在问题。

void CurveDrawer::curveSelected(QPointF pos){
QMapIterator<QPair<unitID, QString>, carData*> it(dataMap);
while(it.hasNext()){
    it.next();
    QPainterPath curPath = it.value()->pathItem->path();
    if(curPath.contains(pos)){
        for (int i = 0; i < list->count(); ++i) {
            QListWidgetItem* curItem = list->item(i);
            if(curItem == it.value()->listItem){
                qDebug() << "curveSelected";
                curItem->setSelected(true);
            }
        }
    }
}
}

任何人都经历过类似的事情,或者可能会在我的代码中看到一些明显的错误?

编辑:

如何实现每次在场景内单击时都会调用 mousePressEvent?这基本上就是我想要它做的。现在只有当我点击某个区域时才会调用它。

我现在尝试用 void DrawGraphicsView;;mousePressEvent(QMouseEvent *event) 来实现它,那里也存在同样的问题。该事件刚刚从场景中的某些区域调用。

对我来说奇怪的是,当场景中的某个位置在视口左侧时,无法调用 mousepressEvent,但是当我在视口中向右滚动同一位置时,突然可以调用 mousepressEvent。这是否使问题更清楚?

4

0 回答 0