QModelIndex idx_cur = tree_view->currentIndex();QModelIndex idx_next;if(idx_cur.isValid()) idx_next = model->index(idx_cur.row() + 1, idx_cur.column());else idx_next = model->index(0,0);...QModelIndexList indexList = proxyModel->match(ind_ex, Qt::DisplayRole, var, 1, Qt::MatchStartsWith | Qt::MatchWrap | Qt::MatchRecursive);if(indexList.count() > 0){ QModelIndex index = indexList.first(); if(index.isValid()) { selectionModel->select(index, QItemSelectionModel::Select); tree_view->scrollTo(index ,QAbstractItemView::PositionAtCenter); slot_itemSelected(index); selectionModel->setCurrentIndex(index, QItemSelectionModel::Select ); }}
QModelIndex idx_cur = tree_view->currentIndex(); QModelIndex idx_next; if( proxyModel->hasChildren( idx_cur )) { idx_next = proxyModel->index(0,idx_cur.column(), idx_cur); // дети есть - проваливаемся глубже } else { QModelIndex idx_parent = proxyModel->parent(idx_cur); if(idx_parent.isValid()) // парент есть? { int row = proxyModel->rowCount(idx_parent); // число детей у парента if(idx_cur.row() < row) // число детей больше чем номер текущего ребенка { idx_next = proxyModel->index(idx_cur.row()+1, 0, idx_parent); // увеличиваем строку ребенка } } }
QModelIndexList indexList = proxyModel->match(idx_next , Qt::DisplayRole, var, 1, Qt::MatchStartsWith | Qt::MatchWrap | Qt::MatchRecursive);if(indexList.count() == 0){// что то делать - как то выходить вверх по текущей иерархии}