Qt QDrag::exec未调用QGraphicsView mouseRelease

Qt QDrag::exec未调用QGraphicsView mouseRelease,qt,qgraphicsview,qmouseevent,Qt,Qgraphicsview,Qmouseevent,我在QGraphicsView中实现了mousePress、mouseMove和mouseRelase,并在其中添加了QGraphicsWidget和QGraphicsLayoutItem,并将其添加到视图中 现在在我已经实现的graphicsLayoutitem中 void ParentItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { m_mousePressed = true; QGraphicsObject::

我在QGraphicsView中实现了mousePress、mouseMove和mouseRelase,并在其中添加了QGraphicsWidget和QGraphicsLayoutItem,并将其添加到视图中

现在在我已经实现的graphicsLayoutitem中

void ParentItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    m_mousePressed = true;
    QGraphicsObject::mousePressEvent(event);
}

void ParentItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    if (!(event->buttons() & Qt::LeftButton))
    {
        QGraphicsObject::mouseMoveEvent(event);
        return;
    }
    if( this->boundingRect().contains(event->pos()) && (m_mousePressed))
    {
        QGraphicsObject::mouseMoveEvent(event);

        QDrag *drag = new QDrag(this);
        QMimeData *mimeData = new QMimeData;




        // mime stuff
        mimeData->setText("Parent");


        drag->setPixmap(m_currentImage.scaled(30,30));
        drag->setHotSpot(QPoint(15, 20));

        drag->setMimeData(mimeData);



        // start drag
            drag->start(Qt::CopyAction | Qt::MoveAction);
}
因此,当我在parentitem中移动鼠标时,拖动已成功执行且 当我在场景中放置项目时,graphicsView没有获得mouseRelease事件。 graphicsview mouseRelease事件在我将其放到场景中时未被调用

这就是我处理中途下车场景的方式

void HandlerScene::dropEvent ( QGraphicsSceneDragDropEvent * event )
{
if (event->mimeData()->hasText()){

        if(event->mimeData()->text() == "Parent")
{
   //My code
}
 event->acceptProposedAction();
}
我上传到

您可以在项目上拖放,它将创建一个新项目。 它工作得很好,但当我将setFocus(Qt::mouseFocusReason)赋予该项时,实际问题就开始了

用户双击项目文本时,我在其顶部添加了一个Qgraphicstextitem。当文本项失去焦点时,我将删除它

在正常情况下,如果不双击项目文本,则拖放工作正常

但是当我在项目顶部添加QGraphicsTextItem并将焦点设置为setFocus(Qt::mouseFocusReason)时 如果我再次拖动该项
QGraphicsView mouseMove事件正在继续调用

你设置了(真的)吗?是的。拖放工作正常,但视图(Graphicsview)停止接收事件(鼠标释放事件)可能会有帮助我已附加代码链接。通过拖放项目,可以添加更多项目。双击该项目将显示一个可编辑的文本项目。所以,如果您编辑并失去焦点,文本项将被删除。现在您拖放该项目,您可以看到将调用QGraphicsview的mouseMove。这很可能是一个Qt错误。如果你能尽量减少这种情况,你应该提交一份bug报告
QDrag::exec()
是一个半坏的黑客,不管怎样,如果它有这个问题,我不会感到惊讶。。。