Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 嵌套模型/视图体系结构_C++_Qt_View_Model_Delegates - Fatal编程技术网

C++ 嵌套模型/视图体系结构

C++ 嵌套模型/视图体系结构,c++,qt,view,model,delegates,C++,Qt,View,Model,Delegates,Qt/Qml使用模型/视图体系结构,但它们的示例太简单。我想知道更复杂的问题应该是什么样子。假设我们有一个应用程序。根据Qt的模型/视图体系结构,最佳解决方案是创建ApplicationModel、ApplicationView和ApplicationLegate。现在让我们的应用程序有一个控制台和其他组件。控制台应分为ConsoleModel、ConsoleView和ConsoleLegate。但控制台有自己的输入和输出,应将其分为ConsoleOutputModel、ConsoleOutpu

Qt/Qml使用模型/视图体系结构,但它们的示例太简单。我想知道更复杂的问题应该是什么样子。假设我们有一个应用程序。根据Qt的模型/视图体系结构,最佳解决方案是创建ApplicationModel、ApplicationView和ApplicationLegate。现在让我们的应用程序有一个控制台和其他组件。控制台应分为ConsoleModel、ConsoleView和ConsoleLegate。但控制台有自己的输入和输出,应将其分为ConsoleOutputModel、ConsoleOutputView、ConsoleOutputDelegate和ConsoleInputModel、ConsoleInputView、ConsoleInputDelegate。
但这一切应该如何结合呢?ApplicationModel是否应包含包含ConsoleOutputModel和ConsoleInputModel的ConsoleModel?这是有道理的,但是视图和代理呢?类似地,还是ApplicationLegate应该控制ConsoleView和ConsoleLegate?那么ConsoleOutputView应该如何访问ConsoleOutputModel?

我将非常感谢每一个提示或示例解决方案。

您所暗示的大部分都是错误的。没有理由嵌套模型,除非您希望在逻辑上合并它们的数据——如果是这样,您需要编写一个自定义代理模型来实现这一点。Qt提供的现有代理模型只有一个源模型。这就是我们要做的,做一个多源代理当然是可能的

在Qt的模型视图模型中,委托有一个特定的含义:它是用于与项目交互的视觉“皮肤”。它具体派生自
qabstractemdelegate
类。委托概念适用于模型中已查看的项目,而不是整个视图。您可能需要许多代理,而不是一个,或者根本不需要代理。它与模型视图控制器中的委托概念不同

我看到的另一个问题是要求整个应用程序都是
ApplicationView
。Qt不提供将使用
qabstractemmodel
作为数据源构建整个应用程序的基于小部件的用户界面的视图。最接近的是
QUiLoader
,它可以加载
.ui
XML文件并实例化ui对象,但它不使用模型视图框架,而且是一次性操作:对底层XML模型的任何更改都不会自动传播


模型和视图通常在Qt中使用的方式是将模型耦合到一个或多个视图小部件。然后,这些小部件以特定的方式显示模型的某些子集(可能是完整模型)。您甚至可以使用
QModelWidgetMapper

将一个模型与任何小部件的属性相耦合。提供这样的问题以表明它们受欢迎是不好的……好吧,有一种或多或少客观地回答它的方法。如您所见,答案主要与Qt中的可用内容以及如何使用有关。在我看来,每个应用程序都是一个组件树。所以问题是:Qt的模型/视图架构是否定义了如何处理如此复杂的结构?如果是,怎么做?如果没有,就说出来。