1

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

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

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

4

2 回答 2

1

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

于 2013-09-20T19:17:09.530 回答
0

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

于 2013-09-20T19:07:02.783 回答