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

#qt #drag-and-drop #qtreewidget #toplevel

#qt #перетаскивание #qtreewidget #верхний уровень

Вопрос:

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

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

 dragEnabled  = true

dragDropOverwriteMode = true

dragDropMode = InternalMove
 

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

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

Комментарии:

1. Вы пробовали QTableWidget ?

2. о, я решил эту проблему с помощью QTreeWidget. спасибо.

Ответ №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);