在我的应用程序中,我想在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
的重新定义中,只需检查父索引的有效性,即可确保您的新闻基础数据创建在您希望的位置。
如果您有疑问,在模型中插入数据不会影响当前项和选定项。