如何在QTreeView顶部插入项目

时间:2015-03-27 10:16:41

标签: qt qtreeview qabstractitemmodel

在我的应用中,我想在QTreeView的顶部插入一个项目。

到目前为止,我将在当前所选项目的正上方插入一个项目。代码(我认为,来自EditableTreeviewDemo):

QModelIndex index = this->selectionModel()->currentIndex();
QAbstractItemModel *model = this->model();

if (!model->insertRow(index.row(), index.parent()))
    return;

我想我需要的是当前第一行的索引?我怎么得到这个?

作为一个附带问题,插入行时当前索引会发生什么?它是继续指向同一个项目还是同一行?

1 个答案:

答案 0 :(得分:3)

首先,您必须知道insertRow是来自QAbstractItemModel的函数,它将调用insertRows(带有s)。如果要允许在模型中插入数据,则必须在模型子类中重新定义此函数。

http://doc.qt.io/qt-5/qabstractitemmodel.html#insertRows

还要考虑最顶层索引的任何父级都是无效的QModelIndex。然后调用do将是:

model->insertRow(0, QModelIndex());

因为这是第二个参数的默认值,只需调用:

model->insertRow(0);

然后在重新定义insertRows时,只需检查父索引的有效性,以确保在您希望的位置创建新闻基础数据。

对于您的问题,在模型中插入数据不会影响当前和所选项目。