2010-04-05 16 views
6

Desidero associare dati aggiuntivi a ogni QTableWidgetItem inserito nella tabella, per poter utilizzare tali dati in futuro, quando viene fatto clic su un elemento della tabella. Ma quei dati non dovrebbero essere visibili. Come lo posso fare?Qt - Come associare i dati con QTableWidgetItem?

+1

Questa è una delle mie più grandi lamentele contro Qt. Devo ancora trovare, nei pochi mesi che ho usato, un semplice meccanismo analogo al binding di dati in .NET. –

+0

Tutte le classi di visualizzazione degli elementi di Qt (alberi, tabelle, elenchi) sono basate su Modello/Vista, è facile rendere il modello di backend tutto ciò che desideri. Non esiste il collegamento a un clic per SQL che hai con LINQ ma è più flessibile. –

+1

@Martin Lo chiamo "fattibile", non "facile" ... anche se immagino sia meglio che avere i dati legati direttamente alla presentazione. –

risposta

20

È possibile utilizzare QTableWidgetItem::setData() in questo modo:

setData(Qt::UserRole, myData); // set 

Dove myData è un supportato QVariant tipo. È possibile utilizzare QTableWidgetItem::data() per recuperare il valore memorizzato.

Se avete bisogno di più di quello che si può utilizzare Qt::UserRole + 1, + 2, e così via (Qt::UserRole è "il primo ruolo che può essere utilizzato per scopi specifici delle applicazioni.", Si può leggere di più su altri tipi dei ruoli here).

Se si memorizza un tipo personalizzato non supportato nativamente da QVariant, è necessario registrare il proprio tipo con il sistema meta-oggetto Qt. Guarda QMetaType per maggiori dettagli.

Se si volesse memorizzare un numero intero, ad esempio:

QTableWidgetItem* widgetItem = tableWidget->item(row, col); // get the item at row, col 
int myInteger = 42; 
widgetItem->setData(Qt::UserRole, myInteger); 
// ... 
myInteger = widgetItem->data(Qt::UserRole); 
+1

Risposta migliore! –

+0

Come posso associare un numero intero all'elemento tabella con la funzione setData()? Dovrei fare quanto segue: item.setData (Qt :: UserRole, myInteger)? – Narek

+0

Ho cambiato l'esempio per essere più chiaro, spero che aiuti. – richardwb

5

Si potrebbe derivare da QTableItem e fornire il proprio membro di dati, oppure è possibile utilizzare il QTableView con il proprio modello.

+1

Dalla mia esperienza questo è molto più flessibile di dati setData Funzioni Qt – drahnr

+1

Sì, ma la risposta di Richard è probabilmente più semplice per un principiante - o se stai solo provando a tradurre un codice MFC –