如何使用拖放来实现可重新排序的QListView

时间:2017-04-03 13:55:45

标签: c++ drag-and-drop qt5 qlistview qabstractitemmodel

我正在尝试实现可重新排序的列表视图。我在表单中创建了一个QListView,设置了以下设置:

d->widget->ui.listView_searches->setDragEnabled(true);
d->widget->ui.listView_searches->setAcceptDrops(true);
d->widget->ui.listView_searches->setDropIndicatorShown(true);
d->widget->ui.listView_searches->setSelectionMode(QAbstractItemView::SingleSelection);
d->widget->ui.listView_searches->setSelectionBehavior(QAbstractItemView::SelectRows);
d->widget->ui.listView_searches->setDragDropMode(QAbstractItemView::InternalMove);
d->widget->ui.listView_searches->setDefaultDropAction(Qt::MoveAction);

在我重新实现的模型中

Qt::DropActions Websearch::EnginesModel::supportedDropActions() const {
    return Qt::MoveAction;
}

Qt::ItemFlags Websearch::EnginesModel::flags(const QModelIndex &index) const {
    if (index.isValid())
        return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled | QAbstractItemModel::flags(index);
    else
        return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDropEnabled | QAbstractItemModel::flags(index);
}

此外,我实现了insert-,remove-和moveRows。

当我在列表中拖动项目时,我会看到视觉拖放指示器。释放鼠标按钮时,拖动的项目将被删除,并插入新的默认项目。我做错了什么?

0 个答案:

没有答案