• 5616阅读
  • 3回复

怎样Drag时画线?(以解决) [复制链接]

上一主题 下一主题
离线liuxu_lx7
 
只看楼主 倒序阅读 楼主  发表于: 2011-09-14
怎样Drag时画线

我的QGraphicsItem派生类产生QDrag, 在执行QDrag::exec(...)后,以下的mouseMoveEvent全都没有被调用:
QGraphicsItem::mouseMoveEvent(...)
QGraphicsScene::mouseMoveEvent(...)
QGraphicsView::mouseMoveEvent(...)
请问这时,在哪里能捕获到当前鼠标的位置?

【void    dragMoveEvent ( QDragMoveEvent * event ) 】 在这里也不对,它只在【void    dragEnterEvent ( QDragEnterEvent * event )】条件成立后才被响应。


离线liuxu_lx7
只看该作者 1楼 发表于: 2011-09-19
没有哪位朋友会解决么?
离线liuxu_lx7
只看该作者 2楼 发表于: 2011-09-19
哦,解决了,原来是这样。
派生一下QGraphicsView, 重写
    void        dragEnterEvent(QDragEnterEvent *event);
    void        dragMoveEvent(QDragMoveEvent *event);
    void        dropEvent(QDropEvent *event);
关键是在dragEnterEvent里要有event->accept();被执行,才会在之后执行dragMoveEvent。在dragMoveEvent里可以调用update,间接调用paint, 就可以写自己的绘图了。
离线liuxu_lx7
只看该作者 3楼 发表于: 2011-09-20
引用第2楼liuxu_lx7于2011-09-19 17:35发表的  :
哦,解决了,原来是这样。
派生一下QGraphicsView, 重写
    void        dragEnterEvent(QDragEnterEvent *event);
    void        dragMoveEvent(QDragMoveEvent *event);
    void        dropEvent(QDropEvent *event);
.......

这个方法还不太对。应该是派生:QGraphicsScene
分别重写:并且里面一定要调用 QGraphicsScene的相应函数
    void            dragEnterEvent(QGraphicsSceneDragDropEvent *event);  
    void            dragMoveEvent(QGraphicsSceneDragDropEvent *event);  // 在这里给拽的线做update(我是把线addchild到scene, 所以直接update scene)
    void            dragLeaveEvent(QGraphicsSceneDragDropEvent *event); // 当拽的线没有drop到东西,那在抬起鼠标后执行
    void            dropEvent(QGraphicsSceneDragDropEvent* event);  // 如果drop到东西,会调用。
快速回复
限100 字节
 
上一个 下一个