QDrag :: exec没有调用QGraphicsView mouseRelease

时间:2015-03-25 06:36:00

标签: qt qgraphicsview qmouseevent

我在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中鼠标移动时,Drag已经成功执行了 当我在场景中放下项目时,graphicsView没有得到mouseRelease事件。 我将它放在场景中时没有调用graphicsview mouseRelease事件。

这就是我如何处理场景中的下降

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

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

我上传的示例代码 http://filesave.me/file/53135/DropItem-zip.html

您可以拖放该项目,它将创建一个新项目。 它工作正常,但当我给项目提供setFocus(Qt :: mouseFocusReason)时,实际问题就开始了。

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

在没有双击项目文本的正常情况下,拖放工作正常。

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

0 个答案:

没有答案