解决方案两种
- 重写QComboBox 的 paintevent 事件
void ComboBox::paintEvent(QPaintEvent *event)
{
QStylePainter painter(this);
painter.setPen(palette().color(QPalette::Text));
QStyleOptionComboBox opt;
initStyleOption(&opt);
opt.currentIcon = QIcon(); opt.iconSize = QSize();
painter.drawComplexControl(QStyle::CC_ComboBox, opt);
painter.drawControl(QStyle::CE_ComboBoxLabel, opt);
}
- 使用QProxyStyle
class ComboBoxProxyStyle : public QProxyStyle
{
public:
using QProxyStyle::QProxyStyle;
void drawControl(QStyle::ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w) const
{
if(element == QStyle::CE_ComboBoxLabel){
if (const QStyleOptionComboBox *cb = qstyleoption_cast<const QStyleOptionComboBox *>(opt)) {
QStyleOptionComboBox cb_tmp(*cb);
cb_tmp.currentIcon = QIcon();
cb_tmp.iconSize = QSize();
QProxyStyle::drawControl(element, &cb_tmp, p, w);
return;
}
}
QProxyStyle::drawControl(element, opt, p, w);
}
};
pComboBox->setStyle(new ComboBoxProxyStyle(pComboBox->style()));