J'ai un QListView
qui est rempli avec un QStandardItemModel
ou un QStringListModel
(basé sur la simplicité du contenu ... nombre de colonnes).QListView avec QStandardItemModel n'affiche pas la surbrillance de sélection à travers le code
En charge ou en basculant entre les widgets, je recherche l'élément qui doit être sélectionné et j'essaie de le mettre en surbrillance.
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);
}
}
La version m_stringListModel
met en évidence correctement (et défile au point).
La version m_standardItemModel
ne met pas en surbrillance la ligne et ne fait pas défiler jusqu'à l'élément. Mais dans les utilisations après, il fournit correctement les données pour l'index sélectionné:
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();
...
Alors ... il semble que la sélection fonctionne, mais si elle le fait, pourquoi je ne vois pas un point culminant? (et le scrollTo()
)
Remarque - le code est assez géant mais j'ai vérifié la possibilité de recharger le modèle et éventuellement perdre la sélection - et d'ailleurs, la version QStringListModel
fonctionne correctement.
Est-ce un comportement typique de QStandardItemModel
, ou est-ce que je dois faire quelque chose, comme le réglage d'une donnée de type BackgroundRole
?
Comment puis-je mettre en surbrillance la sélection de la vue de liste avec le QStandardItemModel
appliqué?