QTreeWidget Перетаскивание только на верхнем уровне

У меня есть один QTreewidget, который отображает список объектов только на верхнем уровне. Так что вы можете думать, что это виджет списка. Поскольку QListWidget не поддерживает несколько столбцов, я использую QTreeWidget.

Я управлял свойствами, связанными с перетаскиванием, подобным этому.

dragEnabled  = true

dragDropOverwriteMode = true

dragDropMode = InternalMove

Проблема в том, что когда я перетаскиваю элементы в этот древовидный виджет, отброшенный элемент становится дочерним элементом другого элемента, а это не то, что я хочу. Мне нужен только один верхний уровень, потому что мне нужен список, а не дерево.

Есть ли способ реализовать только переупорядочивание элементов? Если нет, можете ли вы предоставить мне другой способ вместо QTreeWidget?


person Denis Turgenev    schedule 18.05.2021    source источник
comment
Вы пробовали QTableWidget?   -  person asitdhal    schedule 14.06.2021
comment
о, я решил эту проблему с помощью QTreeWidget. Спасибо.   -  person Denis Turgenev    schedule 14.06.2021


Ответы (1)


Используя следующий код, я мог бы создать сортируемый, многоколоночный список, запускаемый контекстным меню, с помощью QTreeView.

    ui->sensorTreeView->setColumnCount(2);
    ui->sensorTreeView->setSelectionMode(QAbstractItemView::MultiSelection);
    ui->sensorTreeView->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui->sensorTreeView->setContextMenuPolicy(Qt::CustomContextMenu);
    ui->sensorTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    ui->sensorTreeView->setItemsExpandable(false);
    ui->sensorTreeView->setExpandsOnDoubleClick(false);


    ui->sensorTreeView->setDragEnabled(true);
    ui->sensorTreeView->viewport()->setAcceptDrops(true);
    ui->sensorTreeView->setDropIndicatorShown(true);
    ui->sensorTreeView->setDragDropMode(QAbstractItemView::InternalMove);
person Denis Turgenev    schedule 14.06.2021