在我的应用中,我想在QTreeView的顶部插入一个项目。
到目前为止,我将在当前所选项目的正上方插入一个项目。代码(我认为,来自EditableTreeviewDemo):
QModelIndex index = this->selectionModel()->currentIndex();
QAbstractItemModel *model = this->model();
if (!model->insertRow(index.row(), index.parent()))
return;
我想我需要的是当前第一行的索引?我怎么得到这个?
作为一个附带问题,插入行时当前索引会发生什么?它是继续指向同一个项目还是同一行?
答案 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
时,只需检查父索引的有效性,以确保在您希望的位置创建新闻基础数据。
对于您的问题,在模型中插入数据不会影响当前和所选项目。