Пока сделал так:
C++ (Qt)
void MyProjectBox::selectItemByProjectId(int id)
{
QStandardItemModel *m_pModel = (QStandardItemModel *)model();
QTreeView *m_pView = (QTreeView *)view();
// Select item with specified id in combobox
if(id == -1)
{
QModelIndex index = m_pModel->index(0, 0);
m_pView->setCurrentIndex(index);
}
else
{
for(int i = 0; i < m_pModel->rowCount(); i++)
{
QModelIndex parentIndex = m_pModel->index(i, 0);
int childCount = m_pModel->rowCount(parentIndex);
for(int j = 0; j < childCount; j++)
{
QModelIndex childIndex = m_pModel->index(j, 0, parentIndex);
QStandardItem *item = m_pModel->itemFromIndex(childIndex);
if(item->data().toInt() == id)
{
setRootModelIndex(parentIndex);
setCurrentIndex(j);
setRootModelIndex(QModelIndex());
qDebug() << "id:" << id << "\t(" << i << "," << j << ")";
return;
}
}
}
}
}
Работает, элемент корректно находит, и выделяет его корректно в соответствии с советом вышеозначенных товарищей:
C++ (Qt)
setRootModelIndex(parentIndex);
setCurrentIndex(j); // j - child tree row
setRootModelIndex(QModelIndex());
m_pView->setCurrentIndex(childIndex) не работает.
Подозреваю, что и обратное преобразование нужно выполнять аналогично - вылетает пока. Причём, что интересно вылетает на том комбобоксе, где текущее значение установлено программно, а там где пользователь выбрал пункт в комбобоксе - возвращает правильный индекс и id. В чём может быть проблема