当每个层具有不同的项类型时编辑QTreeView项

时间:2014-03-03 17:24:34

标签: qt datamapper

我正在做角色动画编辑。

我的角色在像这样的QTreeView中表示

     
  •  字符  
        
    •    动画0    
            
      • 第0帧
      •     
      • 第1帧
      •     
      • 第2帧
      •    
        
    •   
    •    动画1    
            
      • 第3帧
      •     
      • 第4帧
      •     
      • 第5帧
      •    
        
    •  
     

等等。

ItemCharacterAnimation继承了一个基本的抽象Frame课程。

限制是:

  • Character项目可以包含任意数量的Animation个项目
  • Animations项目可以包含任意数量的Frame个项目
  • Frame项目不能有任何孩子

现在,从Item继承的所有内容都有一个名称。然后每种类型的项目都会添加自己的属性(Animation可以包含Wrap模式,FPS; Frame可以有持续时间。)

因此树的每个级别都有不同的数据集。

现在我想添加另一个小部件,允许编辑每个Item的数据。小部件将分为3个部分(部分):与角色相关的数据,与动画相关的数据和与帧相关的数据。 当用户选择树中的项目时,窗口小部件将根据以下规则自动填充:

  1. 如果所选项目为Character =>仅填写字符部分
  2. 如果所选项目为Animation =>使用作为此动画的父级的角色填充动画部分+执行步骤1
  3. 如果所选项目为Frame =>使用作为此框架的父级的动画
  4. 填充框架部分+执行步骤2

    我可以区分所选项目(我可以判断它是字符,帧的动画)。我可以从选定的孩子访问父项目。

    我的问题是我不知道如何在我的树模型和编辑小部件之间映射数据。我查看了QDataWidgetMapper,但它没有帮助,看起来它适用于具有相同项目的模型,而我的模型每个级别有不同的项目。

    我可能有一个重大的设计缺陷,或者我根本不知道如何实现我想要实现的目标。

    我想要一些指导。

    P.S。

    这是主屏幕层次结构和3个部分的图像 dmut hierarchy and section editing

1 个答案:

答案 0 :(得分:0)

摘要,来自评论:

  1. 使用QDataWidgetMapper进行数据映射。您可以创建3个映射。对于每一帧。
  2. 将QStackedWidget用于编辑器框架
  3. 在每次选择更改时 - 设置映射并显示必要的小部件。