更改模型时更新QTreeView

时间:2019-10-03 15:31:20

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

0 个答案:

没有答案