我有两个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);

我不得不把 list2InternalMove 否则,当我将其拖动到 list1.

如果我放 list1InternalMove 我不能再掉线了。

我必须写自己的拖放功能才能做到吗?

有帮助吗?

解决方案

您可以扩展 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 在我的示例中),您必须输入新的标头文件的名称,将在其中声明您的类(您可以将上述代码复制并粘贴到此文件中)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top