• 5923阅读
  • 2回复

[提问]Qt 拖拽问题。 [复制链接]

上一主题 下一主题
离线木头人
 

只看楼主 正序阅读 楼主  发表于: 2014-07-07
大家好。
Qt 发送一个拖拽的事件怎么构造呀。查了资料也查不到,网上看到的全都是 接收拖拽消息的处理。

我这里想做的就是 怎么在 QGraphicsViewQGraphicsScene、QGraphicsItem 这种模型中 拖拽一个item到另外的窗口。我该怎么构造这样的消息呢。

这里 是 “发送” 拖拽 而不是 “接收” 拖拽事件。
谢谢大家啦。
本帖提到的人: @dbzhang800 @toby520
离线木头人

只看该作者 2楼 发表于: 2014-07-07
回 kimtaikee 的帖子
kimtaikee:前些阵子刚做完和你需求很接近的。
1. 首先得fire 一个QDrag。
void fireupDrag()
{
....... (2014-07-07 13:28) 

谢谢啊。

http://pengfei.nd.blog.163.com/blog/static/50985670201142141423238/
离线kimtaikee

只看该作者 1楼 发表于: 2014-07-07
前些阵子刚做完和你需求很接近的。
1. 首先得fire 一个QDrag。
  1. void fireupDrag()
  2. {
  3.     
  4.     QDrag* drag = new QDrag(this);
  5.     QMimeData* mimeData = new QMimeData();
  6.     mimeData->setData("data/graph", "graph");
  7.     drag->setMimeData(mimeData);
  8.     drag->exec();
  9.   
  10. }

2. 然后在需要接受此事件的窗口中重载如下三个函数。
  1. void GraphWindow::dragEnterEvent(QDragEnterEvent* e)
  2. {
  3.     if (e->source() == this->m_graphPickResizer) {
  4.         qDebug() << "same source, quitting ...";
  5.         return;
  6.     }
  7.     if (e->mimeData()->hasFormat("data/graph"))
  8.         e->acceptProposedAction();
  9. }
  10. void GraphWindow::dragMoveEvent(QDragMoveEvent* e)
  11. {
  12.     if (e->mimeData()->hasFormat("data/graph"))
  13.         e->acceptProposedAction();
  14. }
  15. void GraphWindow::dropEvent(QDropEvent *event)
  16. {
  17.     const QPoint scenePos = QPoint(event->pos().x() + horizontalScrollBar()->value(), event->pos().y() + verticalScrollBar()->value());
  18.     Graph* g = static_cast<Graph*>(m_graphPickResizer->graph());
  19.     if (g != nullptr) {
  20.         QGraphicsProxyWidget* proxy = m_scene->addWidget(g->clone(), Qt::Widget);
  21.         proxy->setPos(scenePos);
  22.         m_graphPickResizer->addProxy(g, proxy);
  23.         event->acceptProposedAction();
  24. //        if (m_graphPickResizer->isCut())
  25. //            m_graphPickResizer->removeProxy(static_cast<Graph*>(m_graphPickResizer->graph()), true);
  26.     }
  27.     m_graphPickResizer->setGraph(nullptr);
  28. }


快速回复
限100 字节
 
上一个 下一个