如何在QTreeView中显示所有子项?

问题描述 投票:0回答:1

我尝试从Qt创建一个QTreeView作为示例

http://doc.qt.io/qt-5/qtwidgets-itemviews-editabletreemodel-example.html

enter image description here

当我们点击每个“父”项目之前的三角形时,将显示“儿童”项目。

在我的例子中,我将此行添加到树视图中

 myTreeView->setRootIsDecorated(false);

结果,在每个“父”项之前不再有三角形。

enter image description here

但“儿童”物品也不再显示。

我的要求是:

  • 在每个“父”项之前禁用三角形
  • 显示树中的所有项目,包括“父”和“子”

我该怎么做?

qt qtreeview
1个回答
1
投票

根据评论,您可以通过调用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);
  }

这应该为大型模型提供更好的性能。

© www.soinside.com 2019 - 2024. All rights reserved.