Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Akon от Июль 09, 2012, 09:33



Название: QTreeView::expandAll/collapseAll(const QModelIndex& index)
Отправлено: Akon от Июль 09, 2012, 09:33
QTreeView имеет функции expandAll()/collapseAll() (без параметров), которые разворачивают/сворачивают все объекты. Необходимо выполнить эти действия для конкретного объекта. Что-то не вижу этого функционала в QTreeView, а он, имхо, очень востребован. Может полохо смотрю?

Решение в лоб - написать рекурсивную функцию с использованием QTreeView::expand/collapse(const QModelIndex& index), но, думаю, это грубо (в каждом вызове expand/collapse всякие релейауты), на больших объемах, полагаю, будут тормоза.

Какое эффективное решение знаете?

Впрочем, по нажатию "*" идет разворот именно через expand().


Название: Re: QTreeView::expandAll/collapseAll(const QModelIndex& index)
Отправлено: evgeniy от Апрель 12, 2014, 14:08
Код:
void MainWindow::expandNode(const QModelIndex &parentIndex, bool expand) {
  tree->setExpanded(parentIndex, expand);
  for (qint32 rowNum = 0; rowNum < treeModel->rowCount(parentIndex); ++rowNum) {
    QModelIndex childIndex = treeModel->index(rowNum, 0, parentIndex);
    tree->setExpanded(childIndex, expand);
    expandNode(childIndex);
  }
}


Название: Re: QTreeView::expandAll/collapseAll(const QModelIndex& index)
Отправлено: Akon от Апрель 19, 2014, 15:57
Цитировать
Решение в лоб - написать рекурсивную функцию с использованием QTreeView::expand/collapse(const QModelIndex& index)
Вы его и привели.