Qt QDrag::exec未调用QGraphicsView mouseRelease
我在QGraphicsView中实现了mousePress、mouseMove和mouseRelase,并在其中添加了QGraphicsWidget和QGraphicsLayoutItem,并将其添加到视图中 现在在我已经实现的graphicsLayoutitem中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::
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()
是一个半坏的黑客,不管怎样,如果它有这个问题,我不会感到惊讶。。。