Преобразование QModelIndex в QString

Есть ли способ преобразовать 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;

Это даже правильный способ получить выбранный в данный момент элемент?

Заранее спасибо!


person NHI7864    schedule 15.05.2012    source источник


Ответы (3)


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

Отправьте вам QList QModelIndex (только один, если вы просматриваете, находится в QAbstractItemView::SingleSelection)

Метод data класса QModelIndex возвращает QVariant, соответствующий значению этот индекс.

Вы можете получить строковое значение этого QVariant, вызвав toString на Это.

person Jokahero    schedule 15.05.2012

Нет, это короткий ответ. QModelIndex — это индекс модели, а не данные, хранящиеся в модели по этому индексу. Вам нужно вызвать data( const QModelIndex& index, int role = Qt::DisplayRole) const в вашей модели, где index будет вашим QModelIndex. Если вы имеете дело только с текстом, DislayRole должно быть достаточно.

Да, способ получения выбранного элемента правильный, но в зависимости от режима выбора он может возвращать более одного QModelIndexQModelIndexList).

person cmannett85    schedule 15.05.2012

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(", "));
person Kamil Klimek    schedule 15.05.2012