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)이지만이 두 클래스가 어떻게 연동되는지 알 수 없습니다.
문제가 없습니다. 그래도이 기능을 사용하면 실제로 편집 가능한 QComboBox를 제공하지 않을 것입니다. 맞습니까? 콤보 상자의 픽셀을 화면에 페인트합니다. 콤보 상자를 완전히 편집하려면 QItemDelegate :: createEditor()를 봐야합니다. QTreeView에서 항목의 인라인 편집을 구현하기 전에이 도구를 사용했습니다. 그것은 꽤 잘 작동합니다. – Adam
예,'createEditor()'도 사용하고 있습니다. 나는 QComboBox가 편집 모드에서뿐만 아니라 항상 보일 수 있어야한다는 문제를 공격하고있었습니다. 그림을 그리는 것이 최선의 해결책은 아닙니다. 'QAbstractItemView :: openPersistentEditor()'이이 작업을 수행합니다! – WolfgangA