嵌套模型/视图体系结构
Nested model/view architecture
Qt/Qml使用模型/视图架构模型/视图编程模型/视图教程,但他们的例子太简单了。我想知道它在更复杂的问题中应该是什么样子。假设我们有Application。根据Qt的模型/视图架构,最好的解决方案是创建ApplicationModel, ApplicationView和ApplicationDelegate。现在让我们的应用程序拥有一个控制台和其他组件。控制台应该被分成ConsoleModel, ConsoleView和ConsoleDelegate。但是控制台有自己的输入和输出,应该分开到控制台输出模型,控制台输出视图,控制台输出代表和控制台输入模型,控制台输入视图,控制台输入代表。
但这一切应该如何结合起来呢?ApplicationModel应该包含包含ConsoleOutputModel和ConsoleInputModel的ConsoleModel吗?这是有道理的,但是视图和委托呢?类似的还是ApplicationDelegate应该控制ConsoleView和ConsoleDelegate?那么ConsoleOutputModel应该如何被ConsoleOutputView访问呢?
我将非常感谢每一个提示或示例解决方案。
你的暗示大多是不正确的。没有理由嵌套模型,除非您希望在逻辑上组合它们的数据—如果是这样,则需要编写自定义代理模型来完成此工作。Qt提供的现有代理模型只有一个源模型。就是这样,做一个多源代理当然是可能的。
在Qt的模型-视图模型中,委托具有特定的含义:它是用于与项目交互的视觉"皮肤"。它特别派生自QAbstractItemDelegate
类。委托概念应用于模型中被查看的项,而不是整个视图。您可能需要许多代表,而不是一个代表,或者根本不需要代表。它与模型-视图-控制器中的委托概念不同。
我看到的另一个问题是要求整个应用程序是ApplicationView
。Qt不提供使用QAbstractItemModel
作为数据源构建整个应用程序的基于小部件的用户界面的视图。最接近的是QUiLoader
,它可以加载.ui
XML文件并实例化UI对象-但它不使用模型-视图框架,并且是一次性操作:对底层XML模型的任何更改都不会自动传播。
Qt中模型和视图的典型使用方式是将一个模型耦合到一个或多个视图部件。然后这些小部件以特定的方式显示模型的某个子集(可能是完整的模型)。您甚至可以使用QModelWidgetMapper
将模型耦合到任何小部件的属性。
- vscode g++链路故障:体系结构x86_64的未定义符号
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- PCL 出错:体系结构x86_64 @pcl的未定义符号
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 体系结构x86_64的未定义符号:链接器错误
- C++ std::vector<int> 体系结构的未定义符号 x86_64:
- 未使用的 asm() 在不受支持的体系结构上的行为
- 用于本地网络运行的客户端服务器体系结构
- 生成文件:体系结构x86_64的未定义符号
- Xcode"体系结构x86_64的未定义符号"
- 有了memory_order_relaxed,原子变量的总修改顺序如何在典型体系结构上得到保证
- 体系结构x86_64的未定义符号:找不到原因
- 在OSx:ld上使用CMake构建C++项目:找不到体系结构x86_64的符号
- 体系结构x86_64的未定义符号:c++/ h 文件和 cpp 文件
- 完全与视图层无关的应用程序体系结构
- MFC文档/视图体系结构-创建没有初始视图的文档
- 嵌套模型/视图体系结构
- Boost::序列化和MFC文档/视图体系结构
- 如何在 MFC 中使用文档/视图体系结构