转换QModelIndex到的QString(Converting QModelIndex to Q

2019-06-24 10:43发布

有没有一种方法来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;

这甚至让当前所选项目的正确方法是什么?

提前致谢!

Answer 1:

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

送你回去QModelIndex的的QList(只有一个,如果你的观点是在QAbstractItemView中:: SingleSelection)

该数据 QModelIndex的方法返回对应于该指数的值的的QVariant。

你可以通过调用得到这个的QVariant的字符串值的toString就可以了。



Answer 2:

不,是一个简短的回答。 一个QModelIndex是索引到模型-不在该指数在模型中保存的数据。 你需要调用data( const QModelIndex& index, int role = Qt::DisplayRole) const与模型index是你的QModelIndex。 如果你只是处理文本DislayRole应该足够了。

是的,你所得到的选择项目的方法是正确的,但是这取决于你的选择模式,它可能会返回一个以上的QModelIndex (在QModelIndexList )。



Answer 3:

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


文章来源: Converting QModelIndex to QString