QStandardItemModel
またはQStringListModel
(内容の単純さ...列数に基づいています)のいずれかが入力されたQListView
があります。QStandardItemModelを使用したQListViewでは、コードによる選択のハイライトが表示されません。
ウィジェットの切り替え時に、選択する項目を検索して強調表示させます。
if (first)
{
m_myListView.setModel(m_standardItemModel);
QList<QStandardItem*> lst = m_standardItemModel->findItems(m_value1, Qt::MatchExactly, 1);
if(!lst.isEmpty())
{
QModelIndex index = lst.at(0)->index();
qDebug() << index.row(); // tells me correct row
//m_myListView.setCurrentIndex(index); // no change if I use
m_myListView.selectionModel()->select(index, QItemSelectionModel::ClearAndSelect);
m_myListView.scrollTo(index);
}
}
else
{
m_myListView.setModel(m_stringListModel);
int i = m_stringListModel->stringList().indexOf(m_value2);
if (i >= 0)
{
QModelIndex index = m_stringListModel->index(i);
m_myListView.selectionModel()->select(index, QItemSelectionModel::ClearAndSelect);
m_myListView.scrollTo(index);
}
}
m_stringListModel
バージョンでは、正しくハイライト表示され(アイテムにスクロールされます)。
m_standardItemModel
バージョンでは行が強調表示されず、項目にスクロールしません。しかし、その後の用途では、それが正しく選択されたインデックスのためのデータを提供します。
QModelIndexList indexList = m_myListView.selectionModel()->selectedIndexes();
if (!indexList.isEmpty())
{
QModelIndex index = indexList.first();
if (index.isValid())
{
row = index.row();
data1 = m_standardItemModel->index(row, 1).data().toString();
...
そう...選択が働くようですが、それがない場合は、なぜ私は表示されませんハイライト? (そしてscrollTo()
)
注 - コードはかなり巨大ですが、モデルを再ロードして選択を失う可能性があることを確認しました。さらに、QStringListModel
バージョンが正しく動作します。
QStandardItemModel
の典型的な振る舞いですか、またはBackgroundRole
タイプのデータを設定するような何かが必要ですか?
QStandardItemModel
を適用してリストビューの選択を強調表示するにはどうすればよいですか?