QDrag::exec не вызывает QGraphicsView mouseRelease

я реализовал mousePress, mouseMove и mouseRelase в QGraphicsView, и я добавил в него 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);
}

поэтому, когда я mouseMove в родительском элементе, Drag успешно выполняется, и когда я бросаю элемент в сцену, graphicsView не получает событие mouseRelease. Событие 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. когда текстовый элемент потерял фокус, я удалил его.

В обычном состоянии без двойного щелчка по тексту элемента перетаскивание работает нормально.

но когда я добавляю QGraphicsTextItem вверху элемента и устанавливаю фокус как setFocus(Qt::mouseFocusReason), и если я снова перетаскиваю элемент, событие QGraphicsView mouseMove продолжает вызываться.


person Wagmare    schedule 25.03.2015    source источник
comment
Вы установилиAcceptDrops (true)?   -  person nayana    schedule 25.03.2015
comment
да. падение работает нормально, но представление (Graphicsview) перестает получать событие (событие выпуска мыши)   -  person Wagmare    schedule 25.03.2015
comment
Возможно, это поможет   -  person nayana    schedule 25.03.2015
comment
Я прикрепил ссылку на свой код. вы можете добавить больше элементов, перетащив их. двойной щелчок по элементу покажет редактируемый текстовый элемент. поэтому, если вы отредактируете и потеряете фокус, текстовый элемент будет удален. теперь вы перетаскиваете элемент, и вы можете видеть, что будет вызываться mouseMove QGraphicsview.   -  person Wagmare    schedule 25.03.2015
comment
Очень вероятно, что это ошибка Qt. Если вы можете свести к минимуму случай, вы должны отправить отчет об ошибке. QDrag::exec() в любом случае - это полусломанный хак, я не удивлюсь, если у него будет эта проблема...   -  person Kuba hasn't forgotten Monica    schedule 26.03.2015