我有一些混乱点击和拖动QGraphicsItem在QGraphicsScene。我想实现以下功能:
在场景的空白处单击一次就可以添加一个项目
单击现有项即可删除该项。
单击和鼠标移动动作将拖拽该项目
我目前尝试用mousereaseevent实现这个自定义场景实现:
对于我的QGraphicsItem称为节点,我设置:
Node::Node(QPointF pos) :
QGraphicsItem()
{
setFlag(QGraphicsItem::ItemIsSelectable);
setFlag(QGraphicsItem::ItemIsMovable);
setFlag(QGraphicsItem::ItemSendsGeometryChanges);
setPos(pos);
}
正如预期的那样,我现在可以在场景中拖动我的项目。然而,添加和删除功能,我尝试通过重写场景方法:
void Scene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent){
if (mouseEvent->button() == Qt::LeftButton){
QGraphicsItem *item = itemAt(mouseEvent->scenePos(), QTransform());
Node *node = qgraphicsitem_cast<Node *>(item);
if(node){
removeItem(node);
}else{
QPointF pt = mouseEvent->scenePos();
Node* node = new Node(pt);
addItem(node);
}
}
QGraphicsScene::mouseReleaseEvent(mouseEvent);
}
然而,用户当前的点击和拖拽也会导致项目被删除,因为点击和拖拽也会触发一个mousereaseevent事件。我如何检测项目是否在场景中被拖来捕捉这种特殊情况,而不触发删除?一般来说,有没有更好的方法来解决这个问题?
我已经检查了拖动教程,但不知何事,我发现的一切都与内部应用拖放& mime数据,这不是我之后。