点击&拖动QGraphicsItem内部QGraphicsScene?

我有一些混乱点击和拖动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数据,这不是我之后。

阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码