首页 > 解决方案 > 更改模型时更新 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 发生了变化?我对这种情况有点复杂。我想我的架构可能从一开始就是错误的,我应该以其他方式实现它。你能给我一个线索吗?先感谢您!

标签: qtqtreeview

解决方案


推荐阅读