Как вставить элемент поверх QTreeView

В моем приложении я хотел бы вставить элемент вверху QTreeView.

То, что у меня есть до сих пор, будет вставлять элемент чуть выше выбранного в данный момент элемента. Код (наверное, взят из EditableTreeviewDemo):

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

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

Я предполагаю, что мне нужен индекс текущей первой строки? Как мне это получить?

Как побочный вопрос, что происходит с текущим индексом, когда вставляется строка? Продолжает ли он указывать на тот же элемент или на ту же строку?


person Michael Vincent    schedule 27.03.2015    source источник


Ответы (1)


Ну, во-первых, вы должны знать, что insertRow — это функция из QAbstractItemModel, и она вызовет insertRows (с буквой s). Эта функция должна быть переопределена в вашем подклассе модели, если вы хотите разрешить вставку данных в вашу модель.

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

Также учтите, что любой родитель самого верхнего индекса является недопустимым QModelIndex. Тогда вызов do будет:

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

И поскольку это значение по умолчанию для второго параметра, просто вызовите:

model->insertRow(0);

Затем в своем переопределении insertRows просто проверьте правильность вашего родительского индекса, чтобы убедиться, что базовые данные новостей созданы там, где вы хотите.

По вашему вопросу вставка данных в модель не повлияет на текущие и выбранные элементы.

person Oragon Efreet    schedule 27.03.2015
comment
Спасибо за ответ и объяснение. - person Michael Vincent; 27.03.2015