将QModelIndex转换为QString

6
有没有一种方法可以将QModelIndex转换为QString?这样做的主要目的是我想与动态生成的QListView项目的内容一起工作。
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;

这是获取当前选定项目的正确方法吗?提前感谢!
3个回答

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

如果您的视图在QAbstractItemView :: SingleSelection中,将向您发送一个QModelIndex列表(仅一个)

QModelIndex的data方法返回与此索引的值相对应的QVariant。

您可以通过调用toString来获取此QVariant的字符串值。


3
不是的,简单来说,QModelIndex 是一个指向模型中索引的指针,而不是该索引位置上所包含的数据。你需要用 data(const QModelIndex& index, int role = Qt::DisplayRole) const 函数调用你的模型,其中 index 为你的 QModelIndex。如果你只处理文本,则 DisplayRole 就足够了。
是的,你获取选定项的方式是正确的,但是根据你的选择模式,它可能会返回一个 QModelIndexList 中的多个 QModelIndex

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(", "));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接