QTreeView / QAbstractItemModel - добавление элементов и использование beginInsertRows

Я реализую свою модель на основе QAbstractItemModel и использую ее с QTreeView для отображения иерархических данных. Данные хранятся в таблице sqlite.

У меня вопрос, как мне вызвать beginInsertRows при добавлении подузлов. Допустим, у меня есть родительский узел, он содержит 10 подузлов. И я хочу добавить новый подузел (в конце).

Я делаю так:

beginInsertRows(parentIndex, currentNodesCount, currentNodesCount);
// actual inserting
endInsertRows()

currentNodesCount содержит значение 10, которое представляет собой количество строк в этом подузле. Новый узел будет размещен на 11-й позиции (10-й отсчет от 0).

Эта логика верна?

Спасибо за помощь.


Мне интересно также использовать beginRemoveRows.

Это верно:

beginRemoveRows(parentIndex, currentRow, currentRow);
// delete record
endRemoveRows();

currentRow содержит позицию в списке удаленных узлов, начиная с 0.


person Community    schedule 13.09.2011    source источник


Ответы (1)


Да это оно.

Это был твой единственный вопрос?

person ixM    schedule 13.09.2011
comment
Да, спасибо. Как обновить представление после изменения записи? испустить dataChanged (.., ..); ? - person ; 13.09.2011
comment
Вы найдете хорошее руководство по созданию подклассов моделей в Qt doc (doc.qt.nokia.com/latest/). Как указано в разделе «Модели с изменяемым размером», в большинстве случаев begin ** () и end ** () должно быть достаточно, чтобы сообщить подключенному представлению (или любому другому компоненту), что структура данных изменилась. P.S. Не стесняйтесь отмечать свой вопрос как полученный, если это так. - person ixM; 14.09.2011
comment
вы комментируете подкласс, имеет неработающую ссылку - person Steve Lorimer; 01.10.2015
comment
@SteveLorimer Обновите ссылку: doc.qt .io / qt-5 / - person Random Citizen; 26.01.2016