QT在两个Qlistwidget之间拖动
-
15-10-2019 - |
题
我有两个qlistwidget(List1和List2)
list1
应该能够从list2
list1
应该能够通过内部阻力重组list2
应该能够从list1
list1->setSelectionMode(QAbstractItemView::SingleSelection);
list1->setDragEnabled(true);
list1->setDragDropMode(QAbstractItemView::DragDrop);
list1->viewport()->setAcceptDrops(true);
list1->setDropIndicatorShown(true);
ulist2->setSelectionMode(QAbstractItemView::SingleSelection);
list2->setDragEnabled(true);
list2->setDragDropMode(QAbstractItemView::InternalMove);
list2->viewport()->setAcceptDrops(true);
list2->setDropIndicatorShown(true);
我不得不把 list2
上 InternalMove
否则,当我将其拖动到 list1
.
如果我放 list1
至 InternalMove
我不能再掉线了。
我必须写自己的拖放功能才能做到吗?
解决方案
您可以扩展 QListWidget
覆盖 dragMoveEvent
类似下面的方法
#ifndef MYLISTWIDGET_HPP
#define MYLISTWIDGET_HPP
#include <QListWidget>
class MyListWidget : public QListWidget {
public:
MyListWidget(QWidget * parent) :
QListWidget(parent) {}
protected:
void dragMoveEvent(QDragMoveEvent *e) {
if (e->source() != this) {
e->accept();
} else {
e->ignore();
}
}
};
#endif // MYLISTWIDGET_HPP
在我们的实施中,我们检查了拖动事件的来源,我们不接受(允许)删除来自小部件本身的项目。
如果您正在使用 qtdesigner 您可以使用 促进... 当您右键单击上下文菜单中的选项 QListWidget
在你的表格上。您必须输入新课的名称(MyListWidget
在我的示例中),您必须输入新的标头文件的名称,将在其中声明您的类(您可以将上述代码复制并粘贴到此文件中)。
不隶属于 StackOverflow