У меня есть QListView
, который заполнен либо QStandardItemModel
, либо QStringListModel
(на основе простоты содержимого ... количества столбцов).QListView с QStandardItemModel не показывает выделение выделения с помощью кода
При загрузке или переключении между виджетами я ищу элемент, который должен быть выбран, и попробуйте выделить его.
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
?