#qt
#qt
Вопрос:
Мне нужно перебирать список QTreeView с помощью кнопок так, как это делается изначально, с помощью клавиш со стрелками на клавиатуре. Я могу заставить его перейти к последнему элементу с помощью этого кода, но он не будет перебирать список, он просто переходит к последнему элементу.
for( int i = 0; i < ui->TList_Tree->topLevelItemCount(); i )
{
ui->TList_Tree->setCurrentIndex(ui->TList_Tree->currentIndex().sibling(i,0));
}
Я уверен, что мне здесь не хватает чего-то простого.
Комментарии:
1. Если вы можете наследовать от
QTreeView
, то вы могли бы использоватьQTreeView::moveCursor
.2. отличная идея, вот что у меня есть до сих пор, но это говорит мне, что перемещение не выполняется. Я не могу найти хороших примеров того, как на самом деле использовать moveCursor. ui-> TList_Tree-> moveCursor(QAbstractItemView::moveDown, Qt::NoModifier);
3. Я также пробовал: QModelIndex ui-> TList_Tree-> moveCursor(QAbstractItemView::moveDown, Qt::NoModifier); но ошибка говорит, что он ожидает инициализации перед -> token после пользовательского интерфейса.
4.
QTreeView::moveCursor
защищен. Вот почему я спросил, можете ли вы наследовать отQTreeView
— вам нужно, чтобы использовать его.5. извините, все еще учусь. Не уверен, как наследовать от QTreeView.
Ответ №1:
Мои комментарии выше пропустили довольно очевидное QTreeView::indexAbove
и QTreeView::indexBelow
. Итак, ваша кнопка, которая перемещает курсор вниз, должна подключаться к коду, который делает что-то вроде…
QModelIndex index = ui->TList_Tree->indexBelow(ui->TList_Tree->currentIndex());
if (index.isValid())
ui->TList_Tree->setCurrentIndex(index);
Выполнил быструю проверку, и, похоже, это делает то, что вы хотите.
Комментарии:
1. да, это было очень полезно, спасибо. Я понимаю, что здесь происходит. Мы получаем индекс ниже того места, где мы сейчас находимся, и, если он действителен, переходим к нему.