2012-10-03 2 views
1

서브 클래 싱 된 QComboBox를 사용자 정의하려면 SubClassed입니다. 필자는 사용자 정의 작업을 시작하기 전에 내 스타일 시트가 제대로 적용되었는지 테스트하기 위해 다음과 같은 paintEvent() 메서드를 작성했습니다. 그러나이 paintEvent를 사용하면 선택한 항목이 표시되지 않습니다 (이미 선택된 항목 또는 새로 선택한 항목).서브 클래 싱 된 QComboBox에 paintEvent()를 작성하는 방법

class MyComboBox: public QComboBox 
{ 
    Q_OBJECT 
public: 
    MyComboBox(QWidget *parent = 0): QComboBox(parent){} 

    virtual void paintEvent(QPaintEvent* pEvent) 
    { 
    QStylePainter painter(this); 
    QStyleOptionComboBox opt; 
    initStyleOption(&opt); 
    painter.drawComplexControl(QStyle::CC_ComboBox, opt); 
    QVariant itemData = this->itemData(this->currentIndex(), Qt::DisplayRole); 
    if(!itemData.isNull() && qVariantCanConvert<QPen>(itemData)) 
     style()->drawItemText(&painter,this->rect(),Qt::AlignLeft,(this->palette()), true, itemData.toString()); 
    } 
}; 

paintEvent를 어떻게 수정합니까? 또한, 다른 Qt 컨트롤에 대한 paintEvent 문서가 있습니까?

+1

함수 끝에 QComboBox :: paintEvent (pEvent)를 추가하십시오. – hank

+0

@hank 무엇을 달성할까요? OP는 이미 명시 적으로 콤보 박스를 그립니다. – cmannett85

+0

@ go4sri 정확하게 그려지는 것이 무엇인지 설명해 주시겠습니까? (또는 사진을 게시하는 것이 더 좋습니다.) – cmannett85

답변

0

여기에서 문제는 파생 클래스에서 먼저 호출하지 않고 기본 클래스 메서드를 재정의한다는 것입니다. 파생 클래스 메서드에서 호출해야합니다.