首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将QModelIndex转换为QString

将QModelIndex转换为QString
EN

Stack Overflow用户
提问于 2012-05-15 17:45:39
回答 3查看 10.3K关注 0票数 5

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

代码语言:javascript
复制
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;

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

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-15 18:03:57

代码语言:javascript
复制
foolistView->selectionModel()->selectedIndexes();

给你发回一个QModelIndex的QList (如果你的视图是在QAbstractItemView::SingleSelection中,只有一个)

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

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

票数 4
EN

Stack Overflow用户

发布于 2012-05-15 18:02:32

不,这是一个简短的答案。QModelIndex是模型的索引,而不是模型中该索引处的数据。您需要在您的模型上调用data( const QModelIndex& index, int role = Qt::DisplayRole) const,并将index作为您的QModelIndex。如果您只处理文本,则DislayRole应该足够了。

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

票数 3
EN

Stack Overflow用户

发布于 2012-05-15 18:06:22

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

代码语言:javascript
复制
QModelIndexList selectedIndexes = foolistView->selectionModel()->selectedIndexes();
QStringList selectedTexts;

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

bar.setText(selectedTexts.join(", "));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10598128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档