请帮我解决这个问题....左侧有QListView
,另一侧有QWidget
。在QListView
我使用QStandardItem
添加了一些项目。现在我想将QListView
项拖放到另一侧QWidget
,我也必须对QWidget
执行相同操作。我可以使用
QListView
项拖放到QListView
中。
listView.setAcceptDrops(true);
listView.setDragEnabled(true);
listView.setDragDropMode(QAbstractItemView::InternalMove);
这在单独的QListView中工作正常。我想将QListView项拖放到另一个Widget。我怎样才能做到这一点?我知道我必须处理像
这样的事件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
项目。
答案 0 :(得分:4)
您不必为视图创建子类。所有拖放操作都由模型处理,因此您必须将标准模型子类化。您可能需要查看model subclassing reference。当然,您还必须将视图的拖放模式更改为QAbstractItemView::DragDrop
以进行外部拖放。