我有一个应用程序,它根据汽车的不同数据绘制线条。我希望我的应用程序能够选择绘制的线条,然后在左侧的列表中选择相应的项目。问题是只有当我在场景最左边的四分之一处按下鼠标按钮时才会调用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。这会使问题更清楚吗?