2011-09-19 6 views
1

비슷한 것을 구현하려고합니다 : http://doc.qt.nokia.com/latest/itemviews-simpletreemodel.html모델 아이템을 사용한 Qt 모델/뷰 : 특정 뷰 아이템이 필요합니까?

오브젝트 트리에있는 노드의 모든 데이터를 포함하는 aosl :: Object 유형이 있습니다.

일부 정보를 QTreeView에 표시하려고합니다. 따라서 뷰를 통해 데이터를 이용할 수 있도록 QAbstractItemModel에서 상속 한 클래스를 구현해야합니다. 여태까지는 그런대로 잘됐다. 이 클래스는 예제의 TreeItemModel 클래스와 비슷합니다.

그러나이 예제에서는 트리 노드에 필요한 데이터를 보유하고있는 것으로 보이는 TreeItem 클래스도 구현합니다. QObject가 아니거나 Qt와 관련된 것입니다. 의심의 여지가 생깁니다.

그래서 질문입니다 : 내 QAbstractItemModel 안에 내 aosl :: Object 유형 이외의 다른 유형이 있어야합니까, 아니면 다른 "항목 유형"을 추가해야하는 withtout와 같이 사용할 수 있습니까?

답변

2

QAbstractItemModel의 외부 인터페이스가 QModelIndex 및 QVariant에서 작동 중입니다. 내부 구조가 뷰 클래스에 노출되지 않습니다. 클래스 (aosl :: Object)가 QAbstractItemModel Decenant의 구현에 필요한 모든 정보를 제공 할 수 있다면 QObject로 래핑 할 필요가 없습니다.

1

클래스 TreeModel을 보면 TreeItemQAbstractItemModel 사이의 다리 역할을한다는 것을 알 수 있습니다. 이 패턴을 사용하면 TreeItemQAbstractItemModel에 의존하지 않으며 QAbstractItemModelTreeItem에 의존하지 않습니다.

이것은 응용 프로그램을 덜 복잡하게 만들기 때문에 유용한 패턴입니다. 예를 들어, 귀하의 aosl::Object 클래스를 (QAbstractItemModel) 트리에 표시하려는 경우에만 변경하지 않아도된다는 것을 의미합니다.