gpt4 book ai didi

c++ - 如何使用 QModelIndex 访问 QTreeView 中的 childWidgets?

转载 作者:搜寻专家 更新时间:2023-10-31 02:17:35 24 4
gpt4 key购买 nike

我正在开发一个使用 Qt 库(4.8 版)的应用程序。

我有一个带有 QStandardItemModel 的 QTreeView。我的小部件看起来像这样:

Item1

subitem11

subitem12

Item2

subitem21

subitem22

Item3

subitem31

subitem32

下面是我如何将项目添加到我的 QTreeView:

 model->setItem(0, 0, item1); 
item1->setChild(0, 0, subitem12);

我只想在用户双击一个项目时采取行动(当他点击一个子项目时什么也不做)。所以我使用 doubleClicked(const QModelIndex & index) 信号。

我想处理有关被用户双重点击的项目/子项目的信息。所以我得到了我的项目/子项目的行:

index.row();

但每次我尝试引用项目/子项目以显示其名称或检查它是否有子项目时,我只能访问项目:

index.model()->item(row)->text();

我的问题是:如何访问我的插槽中的子项(vbetween items abd subitems)?或者我怎样才能阻止他们发出信号?我不能禁用它们——这对用户来说太困惑了。

编辑:问题是每次我点击一个项目或子项目并执行:

index.model()->item(row)->hasChildren();

或:

index.model()->item(row)->parent() == 0;

结果是 true。所以我只能引用项目。

我的问题是:引用子项的正确方法是什么?

最佳答案

当您尝试按行索引访问模型项时,模型会返回该行的顶级项。使用 itemFromIndex 代替:

auto item = index.model()->itemFromIndex(index);
if (item && item->hasChildren()){
// item is not a leaf
}

EDIT index.model() 返回 QAbstractItemModel*,因此这里也需要强制转换(或者,更好的是,存储指向标准模型在代码中)。

关于c++ - 如何使用 QModelIndex 访问 QTreeView 中的 childWidgets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35608894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com