如何在 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;
我想我需要的是当前第一行的索引?我如何获得这个?
作为附带问题,插入行时当前索引会发生什么情况?它是否继续指向同一项目或同一行?
首先您必须知道 insertRow
是 QAbstractItemModel
的一个函数,它将调用 insertRows
(带有 s)。如果要允许在模型中插入数据,则必须在模型子类中重新定义此函数。
http://doc.qt.io/qt-5/qabstractitemmodel.html#insertRows
还要考虑到最顶层索引的任何父级都是无效的 QModelIndex。那么调用将是:
model->insertRow(0, QModelIndex());
并且因为这是第二个参数的默认值,只需调用:
model->insertRow(0);
然后在您对 insertRows
的重新定义中,只需检查您的父索引的有效性,以确保您的新闻基础数据是在您希望的位置创建的。
对于你的问题,在模型中插入数据不会影响当前项和选定项。
在我的应用程序中,我想在 QTreeView 的顶部插入一个项目。
到目前为止,我将在当前所选项目的正上方插入一个项目。代码(我认为是来自 EditableTreeviewDemo):
QModelIndex index = this->selectionModel()->currentIndex();
QAbstractItemModel *model = this->model();
if (!model->insertRow(index.row(), index.parent()))
return;
我想我需要的是当前第一行的索引?我如何获得这个?
作为附带问题,插入行时当前索引会发生什么情况?它是否继续指向同一项目或同一行?
首先您必须知道 insertRow
是 QAbstractItemModel
的一个函数,它将调用 insertRows
(带有 s)。如果要允许在模型中插入数据,则必须在模型子类中重新定义此函数。
http://doc.qt.io/qt-5/qabstractitemmodel.html#insertRows
还要考虑到最顶层索引的任何父级都是无效的 QModelIndex。那么调用将是:
model->insertRow(0, QModelIndex());
并且因为这是第二个参数的默认值,只需调用:
model->insertRow(0);
然后在您对 insertRows
的重新定义中,只需检查您的父索引的有效性,以确保您的新闻基础数据是在您希望的位置创建的。
对于你的问题,在模型中插入数据不会影响当前项和选定项。