首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >接受拖放到QGraphicsScene

接受拖放到QGraphicsScene
EN

Stack Overflow用户
提问于 2019-11-16 04:27:58
回答 1查看 162关注 0票数 0

正在尝试将标签从QWidget拖放到QGraphicsScene。我已经从QLabel定制了实现。此外,QGraphicsView正在接受drops。问题是,当QGraphicsScene将元素拖放到它上面时,它不会得到任何事件。

QLabel实现.cpp

代码语言:javascript
运行
复制
void ItemLabel::mousePressEvent(QMouseEvent *ev)
{
    if(ev->button() == Qt::LeftButton){
       QDrag *drag = new QDrag(this);
       QMimeData *mimeData = new QMimeData;

       mimeData->setText("Test");
       drag->setMimeData(mimeData);
       drag->setPixmap(*this->pixmap());
       drag->exec();

       Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction);
    }
}

场景.cpp

代码语言:javascript
运行
复制
void Scene::dropEvent(QGraphicsSceneDragDropEvent  *event)
{
    event->acceptProposedAction();
    qDebug() << "drop";
}

void Scene::dragEnterEvent(QGraphicsSceneDragDropEvent  *event)
{
    if(event->mimeData()->hasFormat("text/plain"))
        event->acceptProposedAction();
}

我需要做什么才能让场景接收丢弃?

EN

回答 1

Stack Overflow用户

发布于 2019-11-26 23:30:06

您应该扩展QGraphicsView,设置QGraphicsScene,然后覆盖QGraphicsView拖放插槽。

请看下面的工作示例:

代码语言:javascript
运行
复制
MyGraphicsView::MyGraphicsView(QObject *p_parent):
    QGraphicsView(),
    m_scene(nullptr)
{ 

    ...
    m_scene = new QGraphicsScene(rect(), p_parent);
    setScene(m_scene);
    setAcceptDrops(true);
}


void MyGraphicsView::dragEnterEvent(QDragEnterEvent *p_event)
{
    p_event->acceptProposedAction();
}

void MyGraphicsView::dragMoveEvent(QDragMoveEvent *p_event)
{
    p_event->acceptProposedAction();
}

void MyGraphicsView::dropEvent(QDropEvent *p_event)
{
    p_event->acceptProposedAction();
}

如果您不在dragEnterdragMove中使用acceptProposedAction(),您将永远不会触发dropEvent

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58884242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档