拖放 QListView 项

New*_*oon 1 qt drag-and-drop qlistview qt4.7 qt4.8

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

listView.setAcceptDrops(true);
listView.setDragEnabled(true);
listView.setDragDropMode(QAbstractItemView::InternalMove); 
Run Code Online (Sandbox Code Playgroud)

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

void dropEvent(QDropEvent *);
void dragMoveEvent(QDragMoveEvent *);
void dragEnterEvent(QDragEnterEvent *);
void mousePressEvent(QMouseEvent *);
Run Code Online (Sandbox Code Playgroud)

我只是这样试过

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");
}
Run Code Online (Sandbox Code Playgroud)

正如我刚刚尝试使用一些qDebug()当我从我的拖放一个项目QListView并将其放入QWidget 并获得输出为“项目已删除”这是有效的但我不知道如何把我的确切QListView物品带到这里。

qui*_*ars 5

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