【问题标题】:QTreeView disable showing of root nodeQTreeView 禁止显示根节点
【发布时间】:2017-05-09 06:13:19
【问题描述】:

在我的项目中,我使用QTreeView 来显示绘图配置。在顶部,我有一个名为 PlotConfig 的根节点,其中包含多个绘图窗口。每个绘图窗口都包含几个简单的 xy 图。

所以基本上,我有这样的东西:

我正在使用我自己的QAbstractItemModel 来显示此绘图配置。一切正常,但根节点PlotConfig 确实分散了用户的注意力。

所以我想要这样的东西:

有没有办法禁用根节点的显示?直接在QTreeViewQAbstractItemModel 中。我基本上想要的是QList,但每个条目的行为都像一棵树。

【问题讨论】:

  • 你试过打电话给setRootIndex 吗?
  • 没有。但它应该如何帮助我?我需要在我的 PlotConfig 节点下显示几个 PlotWindow 节点。
  • 嗯,所以基本上你想要有几个根节点(想我现在明白了)?在那种情况下我不确定,但你可以试试:)
  • 你可以使用setRowHidden
  • @Aleph0 以我的示例为例,我使用我的treeView 来显示 xml 数据,如果我想显示根目录,我会使用 xml 根目录。如果我只想要孩子,我会在将数据放入模型时忽略根。所以这取决于你的实现。

标签: c++ qt qtreeview qabstractitemmodel


【解决方案1】:

setRowHidden 还隐藏了(我猜)不打算使用的子节点。在您的示例中,您有一个名为 PlotConfig 的根节点。我假设它是 invisibleRootItem 的子节点。在这种情况下,您需要使用 setRootIndex:

setRootIndex(model.invisibleRootItem()->child(0, 0)->index());

这应该会给你想要的结果。

【讨论】:

    【解决方案2】:

    我需要相同的外观,最终意识到树可以有多个“根”节点(在隐式不可见根节点下方),即可以为 Window1、Window2、Window3 等调用 addTopLevelItem。

    QTreeWidgetItem* rootItem;
    rootItem = new QTreeWidgetItem (ui->tree->invisibleRootItem());
    rootItem->setText(0, "Window1");
    ui->tree->addTopLevelItem(rootItem);
    
    rootItem = new QTreeWidgetItem (ui->tree->invisibleRootItem());
    rootItem->setText(0, "Window2");
    ui->tree->addTopLevelItem(rootItem);
    

    【讨论】:

    • 在我的情况下类似...我意识到我只需要不构建第一级即可获得所需的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多