从QAbstractItemModel子类中检索原始项

时间:2016-12-12 16:08:03

标签: qt model-view

我需要实现一个QAbstractListModel子类,这样我就可以将QListView与我们项目的域类一起使用。

该文档很好地介绍了我必须提供的方法,但令我感到困惑的是,没有明显的方法来检索特定QModelIndex的原始对象。

我正在寻找的是这样的:

model MyModel<MyDomainEntity>(listOfDomainEntities);
model.item(someIndexComputedFromSelection); // Should return a MyDomainEntity

MyDomainEntity ent = model.data(someIndexComputedFromSelection, Qt::ItemRole)
                          .value<MyDomainEntity>();

但除了自己实现这些模型方法之外,我找不到任何简单的方法。我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

您必须将MyDomainEntity插入QMetaType系统。这也将自动使QVariant支持它。这就是你的问题中的代码所需要的全部工作。

您只需要:

// Interface
struct MyDomainEntity {
   int a;
};
Q_DECLARE_METATYPE(MyDomainEntity)

int main() {
   QVariant f;
   f.setValue(MyDomainEntity{3});
   Q_ASSERT(f.value<MyDomainEntity>().a == 3);
}

它还使QVariant能够携带您的类型的Qt容器,例如QList<MyDomainEntity>