正在尝试将标签从QWidget拖放到QGraphicsScene。我已经从QLabel定制了实现。此外,QGraphicsView正在接受drops。问题是,当QGraphicsScene将元素拖放到它上面时,它不会得到任何事件。
QLabel实现.cpp
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
void Scene::dropEvent(QGraphicsSceneDragDropEvent *event)
{
event->acceptProposedAction();
qDebug() << "drop";
}
void Scene::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{
if(event->mimeData()->hasFormat("text/plain"))
event->acceptProposedAction();
}我需要做什么才能让场景接收丢弃?
发布于 2019-11-26 23:30:06
您应该扩展QGraphicsView,设置QGraphicsScene,然后覆盖QGraphicsView拖放插槽。
请看下面的工作示例:
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();
}如果您不在dragEnter和dragMove中使用acceptProposedAction(),您将永远不会触发dropEvent。
https://stackoverflow.com/questions/58884242
复制相似问题