Я попытался создать QTreeView в качестве примера из Qt
http://doc.qt.io/qt-5/qtwidgets-itemviews-editabletreemodel-example.html
Когда мы щелкаем треугольник перед каждым «родительским» элементом, будут показаны «дочерние» элементы.
В моем случае я добавляю эту строку в древовидную структуру
myTreeView->setRootIsDecorated(false);
В результате перед каждым «родительским» элементом больше нет треугольника.
Но «детские» предметы тоже больше не показываются.
Мои требования:
Как я могу это сделать?
@ G.M .: большое спасибо! :)
Убедитесь, что этот метод вызывается каждый раз, когда вы меняете данные модели.
@ G.M. Я думаю, было бы полезно опубликовать свое решение в качестве ответа, чтобы вопрос можно было закрыть, и он был хорошо задокументирован для будущих посетителей.
В соответствии с комментарием вы можете программно обеспечить видимость всех элементов в дереве, вызвав QTreeView::expandAll
...
myTreeView->expandAll();
Обратите внимание, что его может потребоваться снова вызвать при добавлении дочерних элементов в модель, что, в зависимости от размера модели, может стать узким местом производительности.
В качестве альтернативы может быть лучше унаследовать от QTreeView
и переопределить член QTreeView::rowsInserted
.
virtual void MyTreeView::rowsInserted (const QModelIndex &parent, int start, int end) override
{
/*
* Let the base class do what it has to.
*/
QTreeView::rowsInserted(parent, start, end);
/*
* Make sure the parent model index is expanded. If it already
* is expanded then the following should just be a noop.
*/
expand(parent);
}
Это должно обеспечить лучшую производительность для больших моделей.
QTreeView::expandAll
то, что вы ищете?