2012-05-15 89 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(", "));