我需要实现一个QAbstractListModel子类,这样我就可以将QListView与我们项目的域类一起使用。
该文档很好地介绍了我必须提供的方法,但令我感到困惑的是,没有明显的方法来检索特定QModelIndex的原始对象。
我正在寻找的是这样的:
model MyModel<MyDomainEntity>(listOfDomainEntities);
model.item(someIndexComputedFromSelection); // Should return a MyDomainEntity
或
MyDomainEntity ent = model.data(someIndexComputedFromSelection, Qt::ItemRole)
.value<MyDomainEntity>();
但除了自己实现这些模型方法之外,我找不到任何简单的方法。我错过了什么吗?
答案 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>
。