2011-01-16 21 views
11

All'interno di una sottoclasse QAbstractListModel già istanziata, come si aggiunge una riga con i dati in ogni colonna e si ha la QListView associata alla nuova riga?Aggiunta di una nuova riga a una sottoclasse QAbstractListModel

Sembra che l'unico modo per farlo è quello di reimplementare insertRow e setData nel mio modello, e poi incidere insieme in una sorta di sequenza all'interno di un'altra funzione per aggiungere una riga. Devo farlo? Sicuramente Qt deve rendere più semplice l'aggiunta di una nuova riga.

Grazie mille! --Dan.

+1

Upon guardando a questa domanda ancora una volta, mi rendo conto che stavo semplicemente bruciato quando l'ho scritto: P La mia domanda in parole semplici è: come si fa Aggiungo una nuova riga alla mia sottoclasse QAbstractItemModel? –

risposta

15

Basta modificare l'archivio di dati del modello, tra beginInsertRows() e endInsertRows().

Ad esempio, supponiamo di avere un modello di elenco semplice e il modello memorizza i dati internamente in un QVector m_data. Si vuole anteporre l'elenco, cioè inserire una riga alla posizione 0:

beginInsertRows(QModelIndex(), 0, 0); //notify views and proxy models that a line will be inserted 
m_data.prepend(somedata); // do the modification to the model data 
endInsertRows(); //finish insertion, notify views/models 
+0

Questo ha funzionato bene, ed è stata una svolta piacevole per vedere finalmente alcuni elementi nella mia visualizzazione elenco. Tuttavia, ho passato letteralmente un giorno e mezzo a cercare di capire tutto questo, e ora il mio ultimo problema è provare a visualizzare un set di dati 1x4. Attualmente mostra solo una colonna di dati e nessuna delle intestazioni di colonna. Hai qualche indicazione su cosa sta andando male? Sono completamente frustrato da quanto sia difficile convincere Qt a fare qualcosa di semplice come i dati della lista. - Dany. –

+3

@nessup: QListView supporta solo una colonna. Se si desidera più colonne e intestazioni, è necessario utilizzare QTreeView o QTableView. –

1

Ho paura che tu debba fare così. Dalle docs:

I modelli che forniscono interfacce per strutture di dati ridimensionabili lista-come in grado di fornire implementazioni di insertRows() e removeRows().

+0

quei collegamenti sono morti – Aidenhjj

Problemi correlati