2012-05-15 59 views
4

有没有办法将QModelIndex转换为QString?这背后的主要目标是我想处理动态生成的QListView-Items的内容。将QModelIndex转换为QString

QFileSystemModel *foolist = new QFileSystemModel; 
    foolist->setRootPath(QDir::rootPath()); 
    foolistView->setModel(foolist); 

[...] 

QMessageBox bar; 
QString foolist_selectedtext = foolistView->selectionModel()->selectedIndexes(); 
bar.setText(foolist_selectedtext); 
bar.exec; 

这是甚至正确的方式来获得当前选定的项目?

在此先感谢!

回答

4
foolistView->selectionModel()->selectedIndexes(); 

发送你回QModelIndex的的QList(只有一个如果查看是在QAbstractItemView中:: SingleSelection)

QModelIndex的data方法返回相应于该索引值的的QVariant。

你可以通过调用toString来得到这个QVariant的字符串值。

3

不,是简短的答案。 A QModelIndex是一个模型的索引 - 而不是该索引模型中的数据。您需要在模型上拨打data(const QModelIndex& index, int role = Qt::DisplayRole) constindex是您的QModelIndex。如果你只是处理文本的DislayRole应该足够。

是的,你得到的选择项目的方式是正确的,但根据您的选择模式,它可能会返回多个QModelIndex(在QModelIndexList)。

1

QModelIndex是一些数据结构的标识符。您应该阅读QModelIndex文档。有一个QVariant data(int role)方法。在大多数情况下,您将需要Qt :: DisplayRole来获取选定的项目文本。请注意,selectIndexes()也返回QModelIndex的列表。它可能是空的或包含多个项目。如果你想得到(即逗号分隔)文本的所有选定的索引,你应该这样做:

QModelIndexList selectedIndexes = foolistView->selectionModel()->selectedIndexes(); 
QStringList selectedTexts; 

foreach(const QModelIndex &idx, selectedIndexes) 
{ 
    selectedTexts << idx.data(Qt::DisplayRole).toString(); 
} 

bar.setText(selectedTexts.join(", "));