Converting QModelIndex to QString

Deadly 提交于 2019-12-23 09:50:09

问题


Is there a way to convert QModelIndex to QString? The main goal behind this is that I want to work with the contents of dynamically generated 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;

Is this even the correct way to get the currently selected Item?

Thanks in advance!


回答1:


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

Send you back a QList of QModelIndex (only one if you view is in QAbstractItemView::SingleSelection)

The data method of QModelIndex return a QVariant corresponding to the value of this index.

You can get the string value of this QVariant by calling toString on it.




回答2:


No, is the short answer. A QModelIndex is an index into a model - not the data held in the model at that index. You need to call data( const QModelIndex& index, int role = Qt::DisplayRole) const on your model with index being your QModelIndex. If you're just dealing with text the DislayRole should sufficient.

Yes the way you are getting the selected item is correct, but depending your selection mode, it may return more than one QModelIndex (in a QModelIndexList).




回答3:


QModelIndex is identifier of some data structure. You should read QModelIndex documentation. There is a QVariant data(int role) method. In most cases you will need Qt::DisplayRole to get selected item text. Note that also selectIndexes() returns a list of QModelIndex. It may be empty or contain more then one item. If you want to get (i.e. comma separated) texts of all selected indexes you should do something like this:

QModelIndexList selectedIndexes = foolistView->selectionModel()->selectedIndexes();
QStringList selectedTexts;

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

bar.setText(selectedTexts.join(", "));


来源:https://stackoverflow.com/questions/10598128/converting-qmodelindex-to-qstring

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!