有没有办法把QModelIndex转换成QString?这背后的主要目标是我想使用动态生成的QListView-Items的内容。
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;这是获取当前所选项目的正确方法吗?
提前感谢!
发布于 2012-05-15 18:03:57
foolistView->selectionModel()->selectedIndexes();给你发回一个QModelIndex的QList (如果你的视图是在QAbstractItemView::SingleSelection中,只有一个)
QModelIndex的data方法返回与此索引的值相对应的QVariant。
您可以通过在此QVariant上调用toString来获取它的字符串值。
发布于 2012-05-15 18:02:32
不,这是一个简短的答案。QModelIndex是模型的索引,而不是模型中该索引处的数据。您需要在您的模型上调用data( const QModelIndex& index, int role = Qt::DisplayRole) const,并将index作为您的QModelIndex。如果您只处理文本,则DislayRole应该足够了。
是的,您获取所选项目的方式是正确的,但根据您的选择模式,它可能会返回多个QModelIndex (在QModelIndexList中)。
发布于 2012-05-15 18:06:22
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(", "));https://stackoverflow.com/questions/10598128
复制相似问题