如何在QTreeWidget中移动QTreeWidgetItem的层级?

4 投票
2 回答
4473 浏览
提问于 2025-04-15 17:51

问题已经说得很清楚了,怎么在QTreeWidget中上下移动QTreeWidgetItems,也就是改变它们的位置。

2 个回答

3

我觉得serge的解决方案有点复杂,实际上对于简单的向上或向下移动来说,有更简单的方法。因为你正在使用QTreeWidget:

QTreeWidgetItem* item = your_qtreewidget->currentItem();
int              row  = your_qtreewidget->currentIndex().row();

if (item && row > 0)
{
    your_qtreewidget->takeTopLevelItem(row);
    your_qtreewidget->insertTopLevelItem(row - 1, item);
    your_qtreewidget->setCurrentItem(item);
}

这里有一段代码可以让你把一个项目向上移动。通过这段代码,你应该能很快找到怎么把它向下移动的方法!

4

我觉得你需要使用模型对象,这样才能调整项目的位置(如果这就是你想做的)。下面有个例子,它把抽象模型中的第一个项目移动到了最底部。

QAbstractItemModel* model = your_tree_view->model();

QModelIndex index0 = model->index(0, 0);
QMap<int, QVariant> data = model->itemData(index0);
// check siblings of the item; should be restored later
model->removeRow(0);

int rowCount = model->rowCount();
model->insertRow(rowCount);
QModelIndex index1 = model->index(rowCount, 0);
model->setItemData(index1, data);

一旦项目在模型中移动了,你的树视图小部件应该会自动更新。

如果你需要改变树视图中显示的项目大小,可以安装一个项目代理,并重写它的sizeHint方法。

希望这对你有帮助,祝好!

撰写回答