2012-06-28 5 views
13

Ich brauche den gewählten Artikel Name in QListView als QString. Ich habe versucht, google, aber ich habe nichts nützliches gefunden.Wie bekomme ich QString von QListView ausgewählten Artikel in Qt?

+3

Blick auf die 'QListView' Dokumentation (vor allem seine [Mitgliederliste] (http: // qt-proje ct.org/doc/qt-4.8/qlistview-members.html)) um zu sehen, wie man den aktuellen Index (ein 'QModelIndex'-Objekt) erhält, und aus dem Index, seinen Dateninhalt abrufen können (a 'QVariant', das Sie in einen' QString' konvertieren können. – alexisdm

Antwort

17

Es hängt von AuswahlMode lässt Sie sagen, Sie haben ExtendedSelection was bedeutet, dass Sie eine beliebige Anzahl von Elementen (einschließlich 0) auswählen können.

ui->listView->setSelectionMode(QAbstractItemView::ExtendedSelection); 

sollten Sie durch ui->listView->selectionModel()->selectedIndexes() iterieren Indizes der ausgewählten Elemente zu finden, und rufen Sie dann text() Methode Itemtexte zu erhalten:

QStringList list; 
foreach(const QModelIndex &index, 
     ui->listView->selectionModel()->selectedIndexes()) 
    list.append(model->itemFromIndex(index)->text()); 
qDebug() << list.join(","); 
+2

Was ist 'Modell 'hier? –

+0

Gibt es eine saubere Möglichkeit, QListViews mit '' 'QAbstractItemView :: ExtendedSelection''' deaktiviert zu verwenden? I.e. wenn nur eine Auswahl möglich ist und die Schleife und Liste damit überflüssig werden? – Paddre

8

Im Fall, wenn QAbstractItemView::ExtendedSelection deaktiviert ist (nur ein Punkt wählen an eine Zeit), ist dies, wie Sie es ohne Schleife tun können:

QModelIndex index = ui->listView->currentIndex(); 
QString itemText = index.data(Qt::DisplayRole).toString();