gpt4 book ai didi

Qt 在两个 QListWidget 之间拖放

转载 作者:行者123 更新时间:2023-12-04 02:06:17 25 4
gpt4 key购买 nike

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

    关于Qt 在两个 QListWidget 之间拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4591923/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com