Qt 从QAbstractItemModel子类检索原始项

Qt 从QAbstractItemModel子类检索原始项,qt,model-view,Qt,Model View,我需要实现一个QAbstractListModel子类,这样我就可以在项目的域类中使用QListView 文档很好地涵盖了我必须提供的方法,但让我感到困惑的是,没有明显的方法来检索特定QModelIndex的原始对象 我要找的是这样的东西: model MyModel<MyDomainEntity>(listOfDomainEntities); model.item(someIndexComputedFromSelection); // Should return a MyDomai

我需要实现一个QAbstractListModel子类,这样我就可以在项目的域类中使用QListView

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

我要找的是这样的东西:

model MyModel<MyDomainEntity>(listOfDomainEntities);
model.item(someIndexComputedFromSelection); // Should return a MyDomainEntity
model MyModel(大陆列表);
model.item(someIndexComputedFromSelection);//应返回MyDomainEntity

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

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

您必须将
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);
}
//接口
结构MyDomainEntity{
INTA;
};
Q_DECLARE_元类型(MyDomainEntity)
int main(){
qf变异体;
f、 setValue(MyDomainEntity{3});
Q_断言(f.value().a==3);
}

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

由于
qabstractemmodel::item
不存在,除了自己实现它之外,您还期待什么?
data()
方法应该由您实现,只要实现正确,第二行中显示的代码就可以工作。请注意,Qt::ItemRole也不存在,必须向模型子类中添加替换项。Qt保留了两个整数,因此您应该选择一个值为256或更高的整数(对于Qt5:)。@LucaFülbier是否应该在所有答案中添加一条免责声明:“您在问题中所写的任何内容都是虚构的,由您来实现”?我是说,你选择了C++和伪代码混合——希望你知道哪个是哪个?为什么我不给那些可能有同样问题的人添加额外的信息?
// Interface
struct MyDomainEntity {
   int a;
};
Q_DECLARE_METATYPE(MyDomainEntity)

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