5

QModelIndexをQStringに変換する方法はありますか?この背後にある主な目標は、動的に生成された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;

これは、現在選択されているアイテムを取得する正しい方法でもありますか?

前もって感謝します!

4

3 に答える 3

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

QModelIndexのQListを返送します(QAbstractItemView :: SingleSelectionに表示されている場合は1つのみ)

QModelIndexのデータメソッドは、このインデックスの値に対応するQVariantを返します。

このQVariantの文字列値は、toStringを呼び出すことで取得できます。

于 2012-05-15T10:03:57.397 に答える
3

いいえ、簡単な答えです。AQModelIndexはモデルへのインデックスであり、そのインデックスでモデルに保持されているデータではありません。QModelIndexであるdata( const QModelIndex& index, int role = Qt::DisplayRole) constモデルを呼び出す必要があります。indexテキストだけを扱っている場合は、DislayRoleで十分です。

はい、選択したアイテムを取得する方法は正しいですが、選択モードによっては、複数のアイテムが返される場合がありますQModelIndex(でQModelIndexList)。

于 2012-05-15T10:02:32.463 に答える
1

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(", "));
于 2012-05-15T10:06:22.417 に答える