Есть ли способ скопировать QStandardItemModel в другую QStandardItemModel? Или я должен перебирать каждую строку и присоединять ее к другой модели?Копировать QStandardItemModel в другой
ответ
Элемент может принадлежать только одной модели. Вот почему вам нужно создать копию каждого элемента и поместить его в другую модель. Вы можете сделать это, используя метод QStandardItem::clone
.
Это пример для моделей отдельных столбцов:
void copy(QStandardItemModel* from, QStandardItemModel* to)
{
to->clear();
for (int i = 0 ; i < from->rowCount() ; i++)
{
to->appendRow(from->item(i)->clone());
}
}
EDIT:
Использования to->removeRows(0, to->rowCount());
вместо to->clear();
если вы хотите сохранить данные заголовка и размеры столбцов в связанных представлениях.
На мой взгляд 'to-> removeRows (0, to-> rowCount())' должен быть лучше, чем 'to-> clear()', потому что он не удаляет общие настройки модели, такие как заголовки, режим изменения размера и т. Д. – Gluttton
@ Gluttton У модели нет таких настроек, как «режим изменения размера». Вы имеете в виду, что вызов 'clear' заставляет просмотреть сброс размеров столбцов? – Ezee
'Вы имеете в виду', да, действительно! – Gluttton
Вы можете сделать копию существующего элемента, выполните следующие шаги:
- Получить существующий элемент.
- Создать новый предмет.
- Установите необходимые роли данных из существующего элемента в новый.
- Сделайте то же самое с флагами.
Или просто используйте метод QStandardItem::clone()
. И переопределите его, если это необходимо.
Вы должны перебирать каждый элемент и КОПИРОВАТЬ (не присоединять) его к другой модели. –
Как я копирую? – Matthias