模型中的 Qt 模型?

Posted

技术标签:

【中文标题】模型中的 Qt 模型?【英文标题】:Qt Model within a model? 【发布时间】:2012-12-31 15:34:54 【问题描述】:

我有一个 Qt 模型,它很可能是 QAbstractListModel。每个“行”代表我存储在QList 中的一个对象。我在QMLListView 中显示这个。但是,每个对象都有一个属性,恰好是一个字符串数组。我想在显示该行的委托中将其显示为ListView。但我不知道如何将该模型(对于对象的字符串数组属性)公开给QML。我不能通过数据函数公开它,因为模型是QObjects,不能是QVariants。我想改用QAbstractItemModel,但我仍然不知道如何为我的ListView 获取模型。以防万一,我使用的是Qt 5.0.0 版本。

【问题讨论】:

【参考方案1】:

您可以从主 QAbstractListModel 返回 QVariantList,然后可以将其作为模型分配给您在代表。我添加了一个小例子,它有一个非常简单的单行模型,以内部模型为例。

c++模型类:

class TestModel : public QAbstractListModel

  public:

  enum EventRoles 
    StringRole = Qt::UserRole + 1
  ;

  TestModel()
  
    m_roles[ StringRole] = "stringList";
    setRoleNames(m_roles);
  

  int rowCount(const QModelIndex & = QModelIndex()) const
  
    return 1;
  

  QVariant data(const QModelIndex &index, int role) const
  
    if(role == StringRole)
    
      QVariantList list;
      list.append("string1");
      list.append("string2");
      return list;
    
  

  QHash<int, QByteArray> m_roles;
;

现在您可以将此模型设置为 QML 并像这样使用它:

ListView 
  anchors.fill: parent
  model: theModel //this is your main model

  delegate:
    Rectangle 
      height: 100
      width: 100
      color: "red"

      ListView 
        anchors.fill: parent
        model: stringList //the internal QVariantList
        delegate: Rectangle 
          width: 50
          height: 50
          color: "green"
          border.color: "black"
          Text 
            text: modelData //role to get data from internal model
          
        
      
    

【讨论】:

谢谢。事实证明,您可以将模型公开为QVariantQVariant::fromValue&lt;QObject*&gt;(myModelInstancePointer);

以上是关于模型中的 Qt 模型?的主要内容,如果未能解决你的问题,请参考以下文章

在 Qt 中使用不同模型访问另一个列表视图的委托中的列表视图模型数据

Qt 中的模型 - 视图 - 控制器

Qt入门教程高级控件篇QModelIndex索引

如何将 Qt 中的 SQL 查询输出模型分配给 QML 的 TableView?

是否可以将模型对象的插槽连接到 QT4 -Designer 中的 GUI?

将采用模型并将其显示在页面中分隔的网格中的 Qt 组件