我正在一个项目中,我有可以包含简单项目的复合项目。使用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发生了变化?我对这种情况有点复杂。我猜我的架构可能从一开始就被误认为,我应该以其他任何方式实现它。能给我个提示吗?预先谢谢你!