1

请帮我解决这个问题....我QListView在左侧有一个QWidget,在另一侧有一个。在QListView我使用QStandardItem. 现在我想将项目拖放QListView到另一边QWidget,我也必须这样做QWidgetQListView我可以通过使用将我的项目拖放到自身内部QListView

listView.setAcceptDrops(true);
listView.setDragEnabled(true);
listView.setDragDropMode(QAbstractItemView::InternalMove); 

这仅在 QListView 内工作正常。我想将 QListView 项目拖放到另一个小部件。我怎样才能做到这一点?我知道我必须像这样处理事件

void dropEvent(QDropEvent *);
void dragMoveEvent(QDragMoveEvent *);
void dragEnterEvent(QDragEnterEvent *);
void mousePressEvent(QMouseEvent *);

我只是这样尝试

void Example::dragMoveEvent(QDragMoveEvent *e)
{
    // The event needs to be accepted here
    e->accept();
}

void Example::dragEnterEvent(QDragEnterEvent *e)
{
    // Set the drop action to be the proposed action.
    e->acceptProposedAction();
}

void Example::dropEvent(QDropEvent *e)
{
    qDebug("Items Dropped");
}

正如我刚刚尝试使用一些qDebug() 一样当我从我的项目中拖动一个项目QListView并将其放入其中QWidget 并将输出作为"Items Dropped"时,这是有效的。但我不知道如何将我的确切QListView物品带到这里。

4

1 回答 1

5

您不必对视图进行子类化。所有拖放内容都由模型处理,因此您必须对标准模型进行子类化。您可能想查看模型子类化参考。当然,您还必须更改视图的拖放模式QAbstractItemView::DragDrop以获取外部拖放。

于 2012-10-20T12:48:44.070 回答