저는 노드가 Node (나에 의해 구현 됨) 또는 그 서브 클래스의 인스턴스 인 트리 같은 다형성 데이터 구조를가집니다. 내 응용 프로그램은 부스트를 많이 사용하며 노드는 실제로는 Node*
이 아닌 boost :: shared_ptr 유형으로 표현됩니다.Qt 모델을 기존 데이터 구조에 바인딩하기
이제 트리 데이터 구조를 래핑하는 Qt 모델을 만들고 싶습니다. 따라서 모델 인덱스를 내부 데이터 구조의 노드와 연관시키는 방법이 필요합니다.
첫째 :
QModelIndex QAbstractItemModel::createIndex (int row, int column, void * ptr = 0) const
내부 에 주어진 행과 열의 모델 인덱스를 작성
Qt는 그것을하고 두 가지 방법을 지원합니다 그리고 여기에 문제가 온다 pointer ptr.
둘째 :
QModelIndex QAbstractItemModel::createIndex (int row, int column, quint32 id) const
내부 식별자 ID로 지정된 행과 열에 대한 모델 인덱스를 생성한다.
좋아, 내 경우에는 노드를 얼마나 정확하게 연결해야합니까? shared_ptr을 모델 인덱스와 연관시킬 수있는 가능성은 없습니다. 예, 알았습니다. shared_ptr에서 원시 포인터를 받아 CreateIndex()
에 공급할 수는 있지만 나쁘지는 않습니다. 너무 안전하지 않은 것처럼 보입니다.
아이디어가 있으십니까?
그런데 일반적으로 Boost/Qt 통합은 최소한 메모리 관리 영역에서는 사소한 것으로 보이지 않습니다.
10x 많이 있습니다.
예, 이해합니다. 이 특정 문제를 해결하기 위해 GUID 포인터 맵과 메모리 풀이 모두 사용될 수 있습니다. 그러나 두 가지 해결책 모두 똑같은 문제를 공유하는 것처럼 보입니다. 문제를 적절하게 해결하는 대신 문제를 해킹하려는 시도와 더 비슷합니다. 위의 제안이 QT 모델을 사용하는 "올바른"방법 인 경우 QT의 모델/뷰 아키텍처에서 실제 디자인 문제라고 말하고 싶습니다. – Lev
@Lev : 설계상의 문제 일지 모르지만 해결하기가 쉽지는 않을 것입니다. 사람들이 나무에 넣을 수있는 데이터의 종류를 추적하는 것이 좋습니다.또한 Qt 사람들이 "NG ModelView 클래스"라고 부르는 것을 살펴보고 더 나은 모델인지 확인하는 것이 좋습니다. http://qt.nokia.com/developer/learning/online/talks/developerdays2009/ tech-talks/the-next-generation-qt-item-views –
@cjhuitt : 링크가 끊어졌습니다. – Macke