在显示视图之前,是否可以在内部更改模型数据
Is it fine to change model data internally before displaying views?
在显示视图之前在内部更改模型数据可以吗?例如
struct MainWindow : QMainWindow
{
MainWindow()
{
mTreeView->setModel(mModel);
mModel->appendChild(...); // No beginInsertRows() and similars are called
}
};
尽管模型在更改模型数据之前设置为视图,但由于视图是在主窗口的构造函数中完成的,因此不会显示视图。如果视图在显示时更新,我认为代码应该没问题。
当模型已经连接到一个或多个视图时,我完全建议在模型修改前后调用相应的begin...
和end...
方法。这些函数发出连接的视图(或代理)在修改数据之前和之后必须处理的信号。否则,视图最终可能会处于无效状态。当没有连接视图(或代理)时,这样做是安全的。
这样做很好 - 至少你的程序不会崩溃。但是,当您以示例中显示的方式向模型添加新项时,视图将不会显示更新,尤其是在不使用 beginInsertRows() 的情况下。如果希望视图正确显示实际数据,请尝试在视图中插入项目后设置模型。否则,您需要在模型类中调用beginInsertRows()和endInsertRows()。
相关文章:
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 在学习数据结构之前对STL有一个了解是好的吗?
- 如何在公共头文件中向库的用户公开枚举,同时在内部使用它?
- std::strlen 在内部是如何工作的?
- STRCMP内部IF在内部不起作用
- 接受函数在发送数据包时等待
- 在 Torch C++ API 中,如何快速写入张量的内部数据?
- std::bad_alloc 在大数据集的 Dijkstra 计算期间
- "std::string"是否将其字符作为签名字符在内部存储?
- 在 c++ 中将数据从文件读取到队列中
- 在结构数据类型中更改每个字符的 ASCII 值
- 在 c++ 中将数据从未对齐结构数组移动到对齐结构数组
- 虚拟基类在内部如何工作?编译器如何解析对基方法的调用?
- 返回给定 SEXP 的子集,而无需知道实际的内部数据类型
- 而(getline(fin,str)){}即使在到达eof之后仍在处理数据
- 如何使客户端在将数据写入 C++ 管道之前检查服务器是否完成了从管道的读取操作
- C++:在"try"外部创建的类型会导致错误,但在内部不会
- 串行读取()不会在没有数据接收的情况下返回值
- 在显示视图之前,是否可以在内部更改模型数据