2012-06-28 39 views
13

Tôi cần lấy tên mục đã chọn trong QListView dưới dạng QString. Tôi đã cố gắng để google, nhưng tôi đã không tìm thấy bất cứ điều gì hữu ích.Cách lấy QString từ mục QListView được chọn trong Qt?

+3

tài liệu 'QListView' (đặc biệt là [danh sách thành viên] của nó (http: // qt-proje ct.org/doc/qt-4.8/qlistview-members.html)) để xem cách lấy chỉ mục hiện tại (đối tượng 'QModelIndex') và từ chỉ mục, bạn sẽ có thể lấy nội dung dữ liệu của nó (a 'QVariant' mà bạn có thể chuyển đổi thành' QString'). – alexisdm

Trả lời

17

Tùy thuộc vào lựa chọnMode cho phép bạn nói rằng bạn có ExtendedSelection có nghĩa là bạn có thể chọn bất kỳ số lượng mục nào (bao gồm 0).

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

bạn nên lặp qua ui->listView->selectionModel()->selectedIndexes() để tìm chỉ số của mục đã chọn, và sau đó gọi text() phương pháp để có được văn bản mục:

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

'Mô hình' ở đây là gì? –

+0

Có cách nào sạch sẽ để sử dụng cho QListViews với '' 'QAbstractItemView :: ExtendedSelection''' bị vô hiệu hóa không? I E. nếu chỉ có một lựa chọn là có thể và vòng lặp và danh sách do đó trở thành không cần thiết? – Paddre

8

Trong trường hợp nếu QAbstractItemView::ExtendedSelection bị vô hiệu hóa (chỉ có thể chọn một mục tại một thời gian), đây là cách bạn có thể làm điều đó mà không có bất kỳ vòng lặp nào:

QModelIndex index = ui->listView->currentIndex(); 
QString itemText = index.data(Qt::DisplayRole).toString(); 
Các vấn đề liên quan