2016-10-04 11 views
0

어쩌면 나는이 모든 잘못에 대해 생각하고 있을지 모르지만, 은 Qt에서 작업 트리 모델을 갖기 때문에 아이템 클래스에 데이터를 래핑해야합니다.Pyside의 트리 모델

QTreeView 용으로 만든 각 모델에서 사용자 지정 Node 또는 TreeItem 클래스 (종종 형식 (개체))를 구현해야한다는 것을 알 수있었습니다. 이것은 여러 가지 이유 때문에 이상하게 여깁니다 :

) 모델이 데이터를 직접 추출 할 수있는 전체 시점이 아닙니까? 노드 또는 TreeItem 클래스는 여분의 수하물처럼 보입니다.

b) 트리 뷰에 특별한 항목/노드 클래스가 필요한 경우에도 왜 그 클래스가 QObject 일종의 것이 아니겠습니까? 지금까지 본 Node 구현물에는 get/set 부모/자식 메소드 및 속성 모음이 있습니다. 하지만 그것은 QObject를 사용하는 것이 이미 모두 내장되어 있으므로 사용하지 않는 것이 좋습니다.

트리 모델을 구현하기 위해 여분의 Node 클래스가 필요하다는 것을 알게 된 나의 직감 (나쁘다)은 Qt 프레임 워크 디자인의 갭 또는 그것.

나는 QStandardItem과 QStandardItemModel을 모호하게 알고 있지만, 왜 QtGui가 아닌 QtCore에 속하는지 묻는다. 다른 모델은 & modelItems이다. QtGui로 이들 클래스를 그룹화하면보기 & 모델이 혼합되어 나타납니다. QtGui 클래스에서 상속받지 못했기 때문에 QtGui에있는 이유를 이해할 수 없습니다.

누구나이 디자인을 정당화 할 수 있다면, 내가 어떻게 오해하고 있는지 설명해주십시오. (또는 저의 좌절감과 관련 있습니다) 나는 그것에 대해 듣고 싶습니다!

감사합니다.

답변

0

는 지난 몇 년 동안 (수십 년?) 많은 QAbstractItemModel 기반 데이터 모델을 구현 데 내가 그러나, 당신의 좌절감을 이해 ...

는 Qt를에서 작업 트리 모델을 가지고, 하나는의 데이터를 포장 할 필요가 항목 클래스.

전혀 아닙니다. 단순히 많은 경우에 모델 행을 자체 클래스로 캡슐화하는 것입니다. 각 열은 항목의 다른 속성을 나타냅니다 (예 : QFileSystemModel을 어떻게 구현할 것인지 생각하십시오).

) 모델이 데이터를 직접 추출 할 수있는 요지가 아닌가요? 노드 또는 TreeItem 클래스는 여분의 수하물처럼 보입니다.

당신 직접 취득/설정에게 특별한 아이템/노드 클래스가 트리 뷰에 필요한 경우에도 QAbstractItemModel::dataQAbstractItemModel::setData

B)를 사용하여 데이터가 왜 클래스가되지 않을 것 몇 가지 QObject의 종류? 지금까지 본 Node 구현물에는 get/set 부모/자식 메소드 및 속성 모음이 있습니다. 하지만 그것은 QObject를 사용하는 것이 이미 모두 내장되어 있으므로 사용하지 않는 것이 좋습니다.

QObject은 상당히 중요한 것입니다.모델이 수천 개의 행을 가질 수 있고 각 행의 열의 수가 적어서 각 셀에 QObject을 상속하도록 강요하면 잘 확장되지 않을 수 있습니다.

나는 QStandardItem 및 QStandardItemModel의 막연하게 알고 있지만 자신이 & modelItems는 다른 모델로, QtCore을 그들이 QtGui의 일부가 왜 요구하지 찾을 수 있습니다. 따라서이 QtGui의 일부이어야하고 이러한 QIconQBrush QtGui 같은 여러 유형 -

QStandardItem는 사용한다 - 따라서에 종속.

내가 말했듯이, 나는 당신의 좌절감을 이해하고 있지만, Qt 코드가 상당히 일반적이라는 사실을 염두에두고 실제로는 매우 유용합니다.

+0

듣기에 안심입니다. 데이터/setData 메소드가 데이터를 직접 제공 할 수 있어야합니다. 그러나 공식 Qt 예제에서도 어디서나 입증 된 것을보기가 어렵습니다. 당신이 나에게 대단히 도움이 될 2 깊은 트리 모델의 구현을 제공 할 수 있다면. createIndex() 및 parent와 같이 정의해야 할 메소드가 있지만 내부적으로 (또는 뷰와 통신 할 때) 어떻게 사용되는지는 약간 불투명 한 것 같습니다. –

+0

아마 내가 가장 어려워하는 것은 작동의 흐름을 이해하고 순환 종속성을 느끼는 것입니다. 데이터 요청에 인덱스가 전달되고 해당 인덱스는 행, col, parent -에 전달되는 createIndex()에서 가져오고 부모는 인덱스가있는 자식에서 비롯되지만 인덱스는 부모 - 그리고 난 길을 잃었 어. –