有没有一种方法来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;
这甚至让当前所选项目的正确方法是什么?
提前致谢!
foolistView->selectionModel()->selectedIndexes();
送你回去QModelIndex的的QList(只有一个,如果你的观点是在QAbstractItemView中:: SingleSelection)
该数据 QModelIndex的方法返回对应于该指数的值的的QVariant。
你可以通过调用得到这个的QVariant的字符串值的toString就可以了。
不,是一个简短的回答。 一个QModelIndex
是索引到模型-不在该指数在模型中保存的数据。 你需要调用data( const QModelIndex& index, int role = Qt::DisplayRole) const
与模型index
是你的QModelIndex。 如果你只是处理文本DislayRole应该足够了。
是的,你所得到的选择项目的方法是正确的,但是这取决于你的选择模式,它可能会返回一个以上的QModelIndex
(在QModelIndexList
)。
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(", "));