我有一个应用程序,它根据汽车的不同数据绘制线条。我希望我的应用程序能够选择绘制的线条,然后在左侧的列表中选择相应的项目。问题是 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。这是否使问题更清楚?