2016-12-12 2 views
-1

QAbstractListModel 하위 클래스를 구현해야 프로젝트의 도메인 클래스에서 QListView를 사용할 수 있습니다.QAbstractItemModel 하위 클래스의 원본 항목 검색

설명서에는 내가 제공해야하는 메서드가 포함되어 있지만 궁금한 점은 특정 QModelIndex의 원래 개체를 검색 할 수있는 확실한 방법이 없다는 것입니다. 내가 찾던

이 같은 것입니다 :

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

또는

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

하지만 난이 모델 방법 자신을 구현하는 외에, 그렇게 할 수있는 쉬운 방법을 찾을 수 없습니다. 내가 놓친 게 있니?

+0

'QAbstractItemModel :: item'이 존재하지 않으므로 직접 구현하는 것 이외에 무엇을 기대합니까? 'data()'메소드는 당신에 의해 구현되어야하며, 두 번째 라인에 보여지는 코드는 구현이 올바른 한 작동해야합니다. –

답변

1

MyDomainEntityQMetaType 시스템에 연결해야합니다. 그러면 자동으로 QVariant도 지원됩니다. 그리고 질문에 대한 코드가 작동하기 만하면됩니다.

당신이 필요로 : 그것은 또한 당신의 유형, 예를 들어,의 Qt는 용기를 수행 할 수 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); 
} 

QList<MyDomainEntity>.

+0

Qt :: ItemRole이 존재하지 않으며 대체 모델을 모델 하위 클래스에 추가해야한다는 점에 유의해야합니다. Qt는 두 개의 정수를 보유하므로 Qt5의 경우 256 이상의 값을 선택해야합니다 (http://doc.qt.io/qt-5/qt.html#ItemDataRole-enum). –

+0

@ LucaFülbier 모든 답변에 면책 조항을 추가해야합니까? "질문에 쓴 내용이 모두 작성 되었으면 구현할의가 있습니까?" 내 말은, 당신은 의사 코드와 C++을 혼합하기로 결정했다. –

+0

동일한 문제가있는 사람들을 위해 추가 정보를 추가하지 않는 이유는 무엇입니까? –

관련 문제