我想在委托中绘制一个QComboBox,除了我无法弄清楚如何绘制在组合框中可见的初始文本之外,它的工作正常。
文档说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);
}
查看qwindowsxpstyle.cpp
我没有看到“真实”组合框的文本在哪里被绘制,因为currentText
方法中未使用drawComplexControl
。它似乎用于Windows XP风格的唯一地方是qcommonstyle.cpp
(第2107行,Qt 4.7.2),但我无法弄清楚这两个类是如何一起玩的。
答案 0 :(得分:7)
除了复杂的控件之外,你似乎还需要强制Qt绘制组合框标签。试试这个:
QApplication::style()->drawControl(QStyle::CE_ComboBoxLabel, &comboBoxOption, painter)
如果我正确阅读文档和来源,可能会强制QStyle绘制组合框标签。你必须同时指明两个......这似乎很奇怪。但说实话,我对Qt样式如何绘制自己并不了解。