2015-08-28 38 views
-1

我需要將QListView中的選定項目名稱作爲QString。我試圖谷歌,但我沒有發現任何有用的。如何從QT中的QListView中獲取選定項目的文本?

QListViewModel和填充它是如下的方法:

QString setting_path = QDesktopServices::storageLocation(QDesktopServices::DataLocation); 

QStandardItemModel *model2=new QStandardItemModel(); 

QFile file(setting_path+"history.txt"); 
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) 
    return; 

QTextStream in(&file); 

while(!in.atEnd()) { 
QString line = in.readLine(); 
QList<QStandardItem *> items; 
QStringList fields = line.split(">"); 
QStringList fields3 = fields.filter(""); 

foreach (QString text, fields3) 
{ 
    items.append(new QStandardItem((QString)text)); 
} 

if(items.length() > 0) 
{ 
    model2->appendRow(items); 
} 
} 
ui->listView->setModel(model2); 
} 

回答

0

用下面的代碼解決:

void hist::on_listView_clicked(const QModelIndex &index) { 
    QModelIndexList templatelist = ui->listView->selectionModel()->selectedIndexes(); 
    QStringList stringlist; 
    foreach (const QModelIndex &index, templatelist){ 
    stringlist.append(index.data(Qt::DisplayRole).toString()); 
    } 
    qDebug() << stringlist.join(","); 
    } 

enter image description here

謝謝大家!

3

我認爲,你可以使用selectedIndexes()這個

QModelIndexList QListView::selectedIndexes() const; 

所以,當你需要的物品 - 只需調用此方法,並通過您的訪問器獲取模型中的項目,或者通過將數據(索引)用於您的/ system角色,或者通過任何方式獲取按行和列的索引來獲取項目。

例如,這是如何得到第一個項目:

void MyListView::somethingIsSelected() { 
    const auto selectedIdxs = selectedIndexes(); 
    if (!selectedIdxs.isEmpty()) { 
     const QVariant var = model()->data(selectedIdxs.first()); 
     // next you need to convert your `var` from `QVariant` to something that you show from your data with default (`Qt::DisplayRole`) role, usually it is a `QString`: 
     const QString selectedItemString = var.toString(); 

     // or you also may do this by using `QStandardItemModel::itemFromIndex()` method: 
     const QStandardItem* selectedItem = dynamic_cast<QStandardItemModel*>(model())->itemFromIndex(selectedIdxs.first()); 
     // use your `QStandardItem` 
    } 
} 
相關問題