2009-07-28 3 views
5

Ho un puntatore a un oggetto di terze parti QListView, che sta semplicemente visualizzando righe di testo. Qual è il modo migliore per afferrare quella stringa di testo?Ottenere testo da QListView

risposta

4

Il modello, accessibile da QListView::model(), detiene le voci. Si può fare qualcosa di simile:

QListView* view ; // The view of interest 

QAbstractItemModel* model = view->model() ; 
QStringList strings ; 
for (int i = 0 ; i < model->rowCount() ; ++i) 
{ 
    // Get item at row i, col 0. 
    strings << model->index(i, 0).data(Qt::DisplayRole).toString() ; 
} 

si parla anche si desidera ottenere le stringhe aggiornati quando il testo è scritto - è possibile farlo collegando il segnale del modello dataChanged() alla funzione che estrae le stringhe. Vedi QAbstractItemModel::dataChanged().

+0

è giusto? QObject :: connect (modello, SIGNAL (dataChanged (QModelIndex, QModelIndex)), client_, SLOT (onText())) dove client_ è una classe derivante da QObject e onText è dichiarato in spazi pubblici. –

+0

Sì, questa è l'idea. Se la tua firma onText() corrisponde anche a quelle dataChanged(), sarai in grado di eseguire il ciclo solo attraverso gli indici su cui i dati sono stati modificati, piuttosto che l'intero elenco. – swongu

+0

questa è la mia riga: QObject :: connect (modello, SIGNAL (dataChanged (const QModelIndex, const QModelIndex)), client_, SLOT (onText (const QModelIndex, const QModelIndex))); restituisce true, ma non vedo il cout che ho inserito nella funzione "onText". Qualche idea? –

3

È possibile chiedere all'oggetto QListView il relativo QModelIndex radice e utilizzarlo per scorrere le varie voci utilizzando i metodi fratello/figlio. È possibile accedere al testo associato a ciascun indice chiamando il metodo dati sull'indice con il ruolo specificato come Qt :: DisplayRole.

Per maggiori dettagli si veda la seguente documentazione:

QAbstractItemView - classe padre per QListView

QModelIndex

+0

e http://doc.trolltech.com/4.5/qvariant.html#toString –

+0

grazie, non provarlo. C'è uno slot a cui posso collegarmi per farlo quando viene scritto un nuovo testo? –