5

有没有办法将 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;

这甚至是获取当前选定项目的正确方法吗?

提前致谢!

4

3 回答 3

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

将 QModelIndex 的 QList 发回给您(如果您在 QAbstractItemView::SingleSelection 中查看,则只有一个)

QModelIndex的data方法返回一个与该索引值对应的 QVariant。

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

于 2012-05-15T10:03:57.397 回答
3

不,是简短的答案。AQModelIndex是模型的索引,而不是模型中该索引处保存的数据。您需要使用您的 QModelIndex来调用data( const QModelIndex& index, int role = Qt::DisplayRole) const您的模型。index如果您只是处理文本,那么 DislayRole 就足够了。

是的,您获取所选项目的方式是正确的,但根据您的选择模式,它可能会返回多个QModelIndex(在 a 中QModelIndexList)。

于 2012-05-15T10:02:32.463 回答
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(", "));
于 2012-05-15T10:06:22.417 回答