2015-01-09 2 views
0

QTreeView 내의 특정 개별 행의 행 높이를 다시 정의 할 수 있습니까?QTreeView 개별 행의 사용자 정의 행 높이

나는 정의 QTreeView, 사용자 정의 QAbstractItemModel 및 사용자 정의 QStyledItemDelegate을 가지고 있지만 모든 sizeHint 방법은 두 번만 (처음에) 불려 갔을 경우, 또는 기본 클래스에 가상하지 않은 것 같다.

Qt 버전 4.7.4에서는 5로 업그레이드 할 수 없습니다.

도움을 주시면 감사하겠습니다.

+1

SizeHintRole이있다() 데이터 내부 QSize (INT, int)를 반환하는 방법을 시도. – Chernobyl

+0

동일한 동작 : sizeHintRole 세트로 data() 메서드를 한 번만 호출합니다! – mefiX

+0

그래서 뭔가를 업데이트하기 위해 다시 호출 데이터가 필요하다면 일반적인 연습은 모델로부터 필요한 QModelIndex'es를 사용하여 dataChanged 신호를 내보내는 것입니다. – Chernobyl

답변

4

대리자의 sizeHint()를 다시 구현합니다. 내 생산 코드의 예를 찾아 냈습니다. 아래에 간략히 표시되어 있습니다. 이 예에서 트리는 이미지를 포함 할 수 있습니다. 따라서 셀 크기를 조정하여 이미지를 호스팅해야합니다.

class ItemDelegate : public QItemDelegate 
{ 
    public: 
     QSize sizeHint (const QStyleOptionViewItem & option, const QModelIndex & index) const 
     { 
      const TreeItem* ti(static_cast<TreeItem*>(index.internalPointer())); 
      if(ti->pixmap()) 
       return ti->pixmap()->size(); 
      QItemDelegate::sizeHint(option,index); 
     } 
}; 

사용법 :이 역할이 요청한

QTreeView view; 
ItemDelegate *delegate = new ItemDelegate; 
view.setItemDelegate(delegate); 
+0

나는 이미 'sizeHint' 메소드를 다시 구현했다. 문제는이 메소드가 모든 트리가 동일한 크기를 갖도록 완전한 트리 (즉 루트'QModelIndex '에만 해당)에 대해 한 번만 호출된다는 것입니다. – mefiX

+3

@ mefiX 아마도, 당신은 forgor http://qt-project.org/doc/qt-4.8/qtreeview.html#uniformRowHeights-prop –

+1

@SaZ에 대해 : 당신은 맞습니다. 사실 그것은 아마도 대답 일 것입니다. – user2672165