2013-03-09 2 views
1

현재 paint(..) 메서드로 그려지는 부분은 QSpinBox 인 사용자 지정 대리자를 구현하고 있습니다.QSpinBox가 제대로 그려지지 않았습니다.

Paint failure

당신이 단계 버튼을 볼 수 있듯이이 대규모을 그려 만 아래쪽 화살표가 나타납니다

void Sy_floatingPointPD::paint(QPainter* painter, 
           const QStyleOptionViewItem& option, 
           const QModelIndex& index) const 
{ 
    painter->save(); 

    // Paint check box. 
    QStyleOptionSpinBox spOpt; 
    spOpt.palette  = option.palette; 
    spOpt.rect  = option.rect; 
    spOpt.state  = option.state; 
    spOpt.frame  = true; 
    spOpt.stepEnabled = QAbstractSpinBox::StepUpEnabled | 
         QAbstractSpinBox::StepDownEnabled; 

    style->drawComplexControl(QStyle::CC_SpinBox, &spOpt, painter); 

    painter->restore(); 
} 

불행하게도이 나타납니다. 흥미롭게도 버튼의 너비는 option.rect이 셀의 크기 임에도 불구하고 첫 번째 테이블 열의 폭을 반영합니다 (올바른 것인데, 아마도 프레임이 올바르게 그려진 이유 일 것입니다).

아이디어가 없습니다. 내 정보가 없습니다. QStyle?

답변

0

Qt 프로젝트 포럼의 Jens가이 질문에 답변했으며, 따라서 here에 링크 할 것입니다. 요컨대

는 단지 그것의 위치 무시하고 option.rect 크기를 사용함으로써 (적어도 QGtkStyle)에 드로잉 스핀 박스 디자인 결함이있다. 이것은 위젯 원점에 매핑되기 때문에 '일반적인'페인팅 시나리오에서 완벽하게 합리적이지만 셀 옵셋으로 인해 항목 뷰에서 렌더링 될 때 실패합니다.

위 문제를 해결하려면 option.rect을 위젯 원본으로 이동 (즉, 왼쪽 위 모서리를 (0,0)로 이동) 한 다음 QPainter을 번역하여 셀 오프셋을 고려합니다.

관련 문제