如何将复杂的分层模型拆分为两个部分视图?

时间:2017-02-07 00:28:09

标签: qt model-view

我正在学习Qt的模型/视图范例,因为它似乎非常适合编辑我必须处理的数据结构,例如:

Addition  
 |_QuadraticFunction  
 |  |_intercept=0.2  
 |  |_slope=0.0  
 |  |_quadratic=1.2  
 |_Multiplication  
   |_LinearFunction  
   |  |_intercept=0.0  
   |  |_slope=-8.9  
   |_Gaussian  
      |_center=0.6  
      |_sigma=0.4  

我的数据结构由一组功能组成,每个功能都有自己的属性。但是,我不想在单个TreeView中显示整个数据结构,因为它对于复杂的结构来说可能会花费太长时间。相反,我想显示一个视图,只包括函数名称,而其他视图只显示用户点击鼠标在上一个视图中选择的函数的属性,如下所示:

(FunctionsView,第一个视图)

Addition  
 |_QuadraticFunction  
 |_Multiplication  
   |_**LinearFunction**
   |_Gaussian  

(selectedFunctionView,第二个视图)

intercept 0.0  
slope -8.9  

在此示例中,用户在第一个视图中单击 LinearFunction ,第二个视图自动显示其属性。
我的问题是:我可以在一个模型下保存我的所有数据结构(函数名称和函数属性),然后有两个只显示模型部分的视图吗?如果没有,我是否必须为每个局部视图创建一个模型,每个模型索引数据结构的不同部分?请帮助,我对此缺乏经验。

.Jose

1 个答案:

答案 0 :(得分:0)

是的,你绝对可以将它保存在一个具有两个不同视图的模型中。您可能想要查看QSortFilterProxyModel;你会为每个视图中的一个。代理应用排序和过滤 - 过滤就是您在此处所做的 - 更完整的模型。当您在主视图中选择某些内容时,您将要发出由其他代理模型(或其他视图传递并传递给其代理)的信号,然后根据新的重新过滤选定的项目。它实际上非常容易使用。最容易犯的错误是使用哪个模型索引感到困惑,因为您将拥有代理的模型索引,以及完整模型的模型索引,有时您必须在两者之间进行转换。文档非常明确地说明了必要的地方,但有助于进一步了解它。

请查看文档,如果您有更多问题,请询问。