qt - 更改模型时更新 QTreeView
问题描述
我正在做一个项目,其中我有可以包含简单项目的复合项目。该程序是使用 Qt 编写的。所以我有一棵树。我决定使用复合设计模式。
https://www.geeksforgeeks.org/composite-design-pattern/
现在我试图在 QTreeView 中显示这种层次结构。假设我有一BaseUnit
堂课。还有一个CompositeUnit
继承了我的班级的BaseUnit
班级。所以一个CompositeUnit
实例有这样存储的孩子:QVector< BaseUnit* > children
. 我也有一个treeModel。在它的构造函数中,我传递了一个指向根项的指针:
TreeModel::TreeModel(BaseUnit* rootItem, QObject *parent):
QAbstractItemModel(parent),
rootItem(rootItem)
{
}
然后我创建我的模型并将其传递给QTreeView
:
scenario = new CompositeUnit();
TreeModel* model = new TreeModel(scenario, this);
ui->treeView->setModel(model);
之后,我填充scenario
了孩子们称之为功能:
void BaseUnit::addUnit(BaseUnit *unit)
{
children.append(unit);
}
...
scenario->addUnit(new BaseUnit(Params params));
如果我在将模型设置为视图之前执行这部分代码,一切都很好,我会看到所有的父母和孩子。但是我需要scenario
在将模型设置为视图后进行填充。据我所知,当我addUnit
的模型不知道这些变化时......我错了吗?还是只有视图不知道模型中的 smth 发生了变化?我对这种情况有点复杂。我想我的架构可能从一开始就是错误的,我应该以其他方式实现它。你能给我一个线索吗?先感谢您!
解决方案
推荐阅读
- c# - 在 C# 中使用 imagemagick 比较两个图像的问题
- mongodb - 如何避免客户的订单历史在 MongoDB 中被更改?
- docker - 使用 nuxt 静态应用程序到前端容器的 traefik 代理
- python - 如何在 Python 中重复或循环这个函数
- java - 在这个例子中如何检查死锁
- node.js - firebase.auth().currentUser 返回 null
- python - 如何通过 IB TWS 通过 python 检索延迟的股票价格
- java - 如何转换单声道
不使用块来配方? - python - 使用具有批量大小的批量标准化时性能不佳
- node.js - 读取csv文件后返回结果