拖放QListView项目

时间:2012-10-16 13:56:31

标签: qt drag-and-drop qt4.7 qlistview qt4.8

请帮我解决这个问题....左侧有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项目

1 个答案:

答案 0 :(得分:4)

您不必为视图创建子类。所有拖放操作都由模型处理,因此您必须将标准模型子类化。您可能需要查看model subclassing reference。当然,您还必须将视图的拖放模式更改为QAbstractItemView::DragDrop以进行外部拖放。