在显示视图之前,是否可以在内部更改模型数据

Is it fine to change model data internally before displaying views?

本文关键字:在内部 数据 模型 是否 视图 显示      更新时间:2023-10-16

在显示视图之前在内部更改模型数据可以吗?例如

struct MainWindow : QMainWindow
{
    MainWindow()
    {
       mTreeView->setModel(mModel);
       mModel->appendChild(...); // No beginInsertRows() and similars are called
    }
};
尽管模型在

更改模型数据之前设置为视图,但由于视图是在主窗口的构造函数中完成的,因此不会显示视图。如果视图在显示时更新,我认为代码应该没问题。

当模型已经连接到一个或多个视图时,我完全建议在模型修改前后调用相应的begin...end...方法。这些函数发出连接的视图(或代理)在修改数据之前和之后必须处理的信号。否则,视图最终可能会处于无效状态。当没有连接视图(或代理)时,这样做是安全的。

这样做很好 - 至少你的程序不会崩溃。但是,当您以示例中显示的方式向模型添加新项时,视图将不会显示更新,尤其是在不使用 beginInsertRows() 的情况下。如果希望视图正确显示实际数据,请尝试在视图中插入项目后设置模型。否则,您需要在模型类中调用beginInsertRows()和endInsertRows()。