2012-07-30 10 views
0

가로 머리글 레이블이있는 QTreeWidget이 있는데, 머리글 레이블을 세로로 나머지는 가로로 그립니다.QTreeWidget의 세로 머리글 레이블

QTreeWidgets의 paintEvent 메서드에서 모든 것을 다시 구현하고 싶지 않기 때문에 머리글 레이블의 paintevent를 제어 한 다음 수퍼 클래스 paintevent을 호출 할 생각입니다. 이의 라인을 따라

뭔가 :

class MyTreeWidget: public QTreeWidget 
{ 
    public void paintEvent (QPaintEvent *e) 
    { 
     ..... //Draw header labels vertically 
     QTreeWidget::paintEvent(e); 
    } 
} 

나는 headerLabels를 삽입 할 때 각 문자 후 \n를 삽입하려고했지만, 그게 내가 정말하고 싶지 않아 정말 추악한 해킹과 뭔가.

제 문제는 헤더 항목을 보관하는 방법이나 세로로 페인트하는 법을 모르는 것입니다. 어떤 아이디어?

답변

0

나는 당신이 paintEvent(QPaintEvent*);

의 기본 구현을 변경 한 다음 MyTreeWidget 클래스에 대한 수평 헤더로 정의 QHeaderView 유도 된 클래스를 설치할 QHeaderView 유도 된 클래스를 만들 생각합니다.

+0

내 수평 헤더로 맞춤형 QHeaderView 파생 클래스를 어떻게 설치하나요? 현재 QTreeWidget :: setHeaderLabels (QStringList labels)을 사용하여 headerLabels를 설정하고 있습니다. –

+0

'QTreeWidget' 파생 클래스의 생성자 안에는 setHeader (new MyCustomHeader (Qt :: Horizontal, this)); – Matthew

+0

이것은 좋은 제안이며 작동하지만 실제로 문제를 해결하기 위해 QStyle을 사용했습니다. –

0

사용자 지정 paintEvent()을 사용하는 경우 문자를 QPainter::DrawText()과 함께 수동으로 배치 할 수 있습니다. 하나씩 출력하고 매번 출력의 좌표를 y 증가 시키거나 Qt::TextWordWrap 플래그를 사용하여 공백을 자동으로 줄이려고 시도합니다 (이 경우에는 매우 좁은 경계 사각형을 만들어야합니다. 나는 그것을 시도하지 않았다).