如何在 QTreeView 顶部插入项目

How do I Insert an item at top of QTreeView

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

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

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

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

我想我需要的是当前第一行的索引?我如何获得这个?

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

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

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

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

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

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

model->insertRow(0);

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

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