2014-09-17 9 views
5

Есть ли способ скопировать QStandardItemModel в другую QStandardItemModel? Или я должен перебирать каждую строку и присоединять ее к другой модели?Копировать QStandardItemModel в другой

+0

Вы должны перебирать каждый элемент и КОПИРОВАТЬ (не присоединять) его к другой модели. –

+0

Как я копирую? – Matthias

ответ

7

Элемент может принадлежать только одной модели. Вот почему вам нужно создать копию каждого элемента и поместить его в другую модель. Вы можете сделать это, используя метод 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(); если вы хотите сохранить данные заголовка и размеры столбцов в связанных представлениях.

+0

На мой взгляд 'to-> removeRows (0, to-> rowCount())' должен быть лучше, чем 'to-> clear()', потому что он не удаляет общие настройки модели, такие как заголовки, режим изменения размера и т. Д. – Gluttton

+0

@ Gluttton У модели нет таких настроек, как «режим изменения размера». Вы имеете в виду, что вызов 'clear' заставляет просмотреть сброс размеров столбцов? – Ezee

+0

'Вы имеете в виду', да, действительно! – Gluttton

1

Вы можете сделать копию существующего элемента, выполните следующие шаги:

  1. Получить существующий элемент.
  2. Создать новый предмет.
  3. Установите необходимые роли данных из существующего элемента в новый.
  4. Сделайте то же самое с флагами.

Или просто используйте метод QStandardItem::clone(). И переопределите его, если это необходимо.