c++ - 这应该在模型中还是在 View 中?

标签 c++ qt design-patterns model-view-controller

我正在使用 QFileSystemModel 来填充我的 TreeView 。用户可以右键单击树节点(文件夹)并执行操作(导出该文件夹下的所有特定数据文件)。

我在 on_tree_clicked() 下有这个导出,但我觉得这个操作属于模型。

如果我从 QFileSystemModel 派生自己的 QFileSystemModelWithExport 并添加导出功能,会不会更好?从 on_tree_clicked(),然后我就调用它?

还有其他方法可以很好地做到这一点吗?我希望我的 on_tree_clicked() 更短更清晰。

此外,我对 Qt 还很陌生,我们如何从 Qt 核心类派生 QFileSystemModel?当我添加类时,它允许我派生自 QObject、QWidget 等,但不能派生自任何模型类。

最佳答案

您的用户界面应该只处理用户界面问题。即按钮按下、用户交互。

然后这应该将它发送到实际执行代码的模型。

这样想,如果您导出到文件需要 5 秒,那么这 5 秒您不能使用您的 UI,因为该线程正在写入文件。如果您拥有此模型,您就有机会对特定事件进行多线程处理,并在执行操作时保持 UI 响应。

代码明智:

onTreeClicked() 可以很短。它可以执行以下操作:

myModel->writeDataFromNodeToFile();

& 然后在该函数中,您可以拥有写入文件所需的所有功能。打开/关闭/流数据等

关于c++ - 这应该在模型中还是在 View 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28348611/

相关文章:

c++ - 如何在C++中动态更新UTextureRenderTarget2D?

c++ - 如何修复 "*private variable* is a private member of ' *类名*' 错误

c++ - 在 Qt TableView 中更改数据

c# - 在方法中应用开/闭原则

c++ - 立即作为参数传递的对象的生命周期是多少?

c++ - 如何传递 std::string 作为构造函数参数并将其保存的 C 字符串存储在 void 指针中?

java - 基于 Spring Boot 中配置的 SOLID IoC

c# - 一个事务中的多个聚合/存储库

qt - 用Qt编译项目后将文件复制到构建目录

qt - QListWidget 在拆分器更改大小时调整内容大小