【Qt】【QListView】QListViewの選択項目の取得

QListViewの選択項目の取得には以下の2通りの方法があります。

  • フォーカス中のアイテムの取得
  • 選択状態のアイテムの取得

まずはそれぞれの方法を示します。

  • フォーカス中のアイテムの取得
    QStandardItem * item = NULL;

    // フォーカス中のアイテムのインデックスを取得
    const QModelIndex index = listView->selectionModel()->currentIndex();
    item = model->itemFromIndex(index);
    Q_ASSERT(item);
  • 選択状態のアイテムの取得
    QStandardItem * item = NULL;
    QList<QStandardItem *> listItem;

    // 選択項目のインデックスリスト(選択順)
    QModelIndexList listIndex = listView->selectionModel()->selectedIndexes();
    foreach ( QModelIndex index, listIndex )
    {
        item = model->itemFromIndex( index );
        Q_ASSERT(item);
        listItem << item;
    }

見ていただければわかるように、この2つの方法には以下の違いがあります。

  • フォーカス中の項目の取得は1つのアイテムインデックスが得られる
  • 選択中の項目の取得は複数のアイテムインデックスが得られる

設定をしない限りは同時に選択できる項目が1つのみのため、
得られる結果に違いはありません。

ただし、複数選択を可能とした場合には、
後者の方法が見かけの選択項目と同じ項目を返します。

複数選択は、以下の設定をすることで可能となります。

    // 選択モードを複数選択に設定
    listView->setSelectionMode( QAbstractItemView::ExtendedSelection );

参考