如何在 QTreeView 中显示所有子项目?
How to show all the children items in QTreeView?
我试图创建一个 QTreeView 作为 Qt 的例子
http://doc.qt.io/qt-5/qtwidgets-itemviews-editabletreemodel-example.html
当我们点击每个“父”项目前的三角形时,将显示“子”项目。
在我的例子中,我将这一行添加到树视图中
myTreeView->setRootIsDecorated(false);
因此,每个“父”项之前不再有三角形。
但是“子项”项也不再显示。
我的要求是:
- 禁用每个“父”项前的三角形
- 显示树中的所有项目,包括“父项”和“子项”
我该怎么做?
根据评论,您可以通过调用 QTreeView::expandAll
...
以编程方式确保树中的所有项目都可见
myTreeView->expandAll();
请注意,它可能需要再次调用 as/when 子项已添加到模型中,根据模型的大小,这可能会成为性能瓶颈。
作为替代方案,最好从 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 作为 Qt 的例子
http://doc.qt.io/qt-5/qtwidgets-itemviews-editabletreemodel-example.html
当我们点击每个“父”项目前的三角形时,将显示“子”项目。
在我的例子中,我将这一行添加到树视图中
myTreeView->setRootIsDecorated(false);
因此,每个“父”项之前不再有三角形。
但是“子项”项也不再显示。
我的要求是:
- 禁用每个“父”项前的三角形
- 显示树中的所有项目,包括“父项”和“子项”
我该怎么做?
根据评论,您可以通过调用 QTreeView::expandAll
...
myTreeView->expandAll();
请注意,它可能需要再次调用 as/when 子项已添加到模型中,根据模型的大小,这可能会成为性能瓶颈。
作为替代方案,最好从 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);
}
这应该为大型模型提供更好的性能。