2014-09-17 11 views
5

C'è un modo per copiare un QStandardItemModel su un altro QStandardItemModel? Oppure devo scorrere su ciascun argomento e aggiungerlo all'altro modello?Copia QStandardItemModel su un altro

+0

Si dovrebbe scorrere su ciascun articolo e COPIARE (non aggiungerlo) a un altro modello. –

+0

Come faccio una copia? – Matthias

risposta

7

Un articolo può essere di proprietà di un solo modello. Ecco perché è necessario creare una copia di ciascun articolo e posizionarlo su un altro modello. Puoi farlo usando il metodo QStandardItem::clone.

Questo è un esempio per i modelli a colonna singola:

void copy(QStandardItemModel* from, QStandardItemModel* to) 
{ 
    to->clear(); 
    for (int i = 0 ; i < from->rowCount() ; i++) 
    { 
     to->appendRow(from->item(i)->clone()); 
    } 
} 

EDIT:
Uso to->removeRows(0, to->rowCount()); invece di to->clear(); se si desidera conservare i dati di intestazione e le dimensioni delle colonne nelle viste collegate.

+0

A mio parere 'to-> removeRows (0, to-> rowCount())' dovrebbe essere migliore di 'to-> clear()', perché non rimuove le impostazioni generali del modello come le intestazioni, la modalità di ridimensionamento, ecc. – Gluttton

+0

@Gluttton Un modello non ha impostazioni come "modalità di ridimensionamento". Vuoi dire che chiamare 'clear' impone una vista per reimpostare le dimensioni delle colonne? – Ezee

+0

"Intendi", Sì, davvero! – Gluttton

1

Si potrebbe fare copia di un elemento esistente con passi successivi:

  1. voce Get esistente.
  2. Crea nuovo elemento.
  3. Imposta i ruoli dati necessari dall'elemento esistente a uno nuovo.
  4. Fai lo stesso con le bandiere.

Oppure utilizzare semplicemente il metodo QStandardItem::clone(). E reimplementalo, se necessario.

Problemi correlati