QTreeView перебирает список

#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. да, это было очень полезно, спасибо. Я понимаю, что здесь происходит. Мы получаем индекс ниже того места, где мы сейчас находимся, и, если он действителен, переходим к нему.