C++ 仅从场景中的某些区域调用mousePressEvent

C++ 仅从场景中的某些区域调用mousePressEvent,c++,qt,user-interface,C++,Qt,User Interface,我有一个应用程序,它根据来自汽车的不同数据绘制线条。我希望我的应用程序能够选择绘制的线条,然后在左侧的列表中选择相应的项目。问题是,mousePressEvent只有在我按下场景最左侧四分之一部分的mousebutton时才会被调用。当它被调用时,curveSelected函数也可以工作,但我不明白为什么我不能从场景的其他区域调用mousePressEvent 首先,我有一个鼠标垫 void DrawingScene:::mousePressEvent ( QGraphicsSceneMouse

我有一个应用程序,它根据来自汽车的不同数据绘制线条。我希望我的应用程序能够选择绘制的线条,然后在左侧的列表中选择相应的项目。问题是,mousePressEvent只有在我按下场景最左侧四分之一部分的mousebutton时才会被调用。当它被调用时,curveSelected函数也可以工作,但我不明白为什么我不能从场景的其他区域调用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);
}
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 drawsview实现它;;MousePresseventMouseEvent*事件,同样的问题也存在。事件刚从场景中的某些区域调用

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

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);
            }
        }
    }
}
}