2011-04-05 3 views
4

콤보 상자 안에 표시되는 초기 텍스트를 그리는 방법을 알 수 없다는 점을 제외하고는 정상적으로 작동하는 위임자 내에 QComboBox를 그려야합니다.QStyleOptionComboBox.currentText를 설정하면 그려진 위젯에 아무런 영향을주지 않습니다.

설명서에는 QStyleOptionComboBox.currentText에 "현재 콤보 상자 항목의 텍스트"라고 표시되어 있습니다. 변수를 설정해도 아무런 효과가 없습니다.

void MyDelegate::paint(QPainter *painter, 
    const QStyleOptionViewItem& option, 
    const QModelIndex& index) const 
{ 
    QStyleOptionComboBox comboBoxOption; 
    comboBoxOption.rect = option.rect; 
    comboBoxOption.state = option.state; 
    comboBoxOption.state |= QStyle::State_Enabled; 
    comboBoxOption.editable = false; 
    comboBoxOption.currentText = "CCC"; // This doesn't show up. 

    QApplication::style()->drawComplexControl(QStyle::CC_ComboBox, &comboBoxOption, painter); 
} 

가 "진짜"콤보 상자의 텍스트가 drawComplexControl 방법 내에서 사용되지 currentText 때문에 그려지는 어디서 볼 수 없어 qwindowsxpstyle.cpp에서 상대 :

내 코드입니다. Windows XP 스타일로 사용되는 유일한 곳은 qcommonstyle.cpp (Line 2107, Qt 4.7.2)이지만이 두 클래스가 어떻게 연동되는지 알 수 없습니다.

답변

6

복잡한 컨트롤 외에도 Qt가 콤보 상자 레이블을 그려야 할 필요가있는 것처럼 보입니다. 이것을 시도하십시오 :

설명서와 소스를 올바르게 읽으면 QStyle이 콤보 상자 레이블을 그릴 수 있습니다. 당신이 두 가지를 모두 지정해야한다는 것이 이상하게 보입니다. 그러나 Qt 스타일이 어떻게 그리는 지에 대해 많이 알지 못합니다. 정직합니다.

+0

문제가 없습니다. 그래도이 기능을 사용하면 실제로 편집 가능한 QComboBox를 제공하지 않을 것입니다. 맞습니까? 콤보 상자의 픽셀을 화면에 페인트합니다. 콤보 상자를 완전히 편집하려면 QItemDelegate :: createEditor()를 봐야합니다. QTreeView에서 항목의 인라인 편집을 구현하기 전에이 도구를 사용했습니다. 그것은 꽤 잘 작동합니다. – Adam

+2

예,'createEditor()'도 사용하고 있습니다. 나는 QComboBox가 편집 모드에서뿐만 아니라 항상 보일 수 있어야한다는 문제를 공격하고있었습니다. 그림을 그리는 것이 최선의 해결책은 아닙니다. 'QAbstractItemView :: openPersistentEditor()'이이 작업을 수행합니다! – WolfgangA

관련 문제