如何在QTreeWidget中移动QTreeWidgetItem的层级?
问题已经说得很清楚了,怎么在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方法。
希望这对你有帮助,祝好!