void ComboBoxItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { const QStandardItemModel* model = qobject_cast<const QStandardItemModel*>(index.model()); if (! model) return; if (index.row() == model->rowCount()-1) { QStyledItemDelegate::paint(painter, option, index); } else { //Add remove icon int height = option.fontMetrics.height(); //QStyleOptionViewItemV4 optionText(option); //optionText.rect.setWidth(optionText.rect.width()-height); QStyledItemDelegate::paint(painter, option, index); if (index.data(Qt::UserRole) != "NOT_VALID") { QStyleOptionViewItemV4 optionIcon(option); optionIcon.rect.setX(option.rect.width()-height); optionIcon.rect.setWidth(height); //QStyle *style = QApplication::style(); //style->drawControl(QStyle::CE_ItemViewItem, &optionIcon, painter); mDeleteIcon.paint(painter, optionIcon.rect); } } //QStyledItemDelegate::paint(painter, option, index); }
void ComboBoxItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionMenuItem opt = getStyleOption(option, index); #ifndef Q_WS_S60 painter->fillRect(option.rect, opt.palette.background()); #endif mCombo->style()->drawControl(QStyle::CE_MenuItem, &opt, painter, mCombo); if (index.data(Qt::UserRole).toString() != INVALID_DATA) { int height = option.fontMetrics.height(); QStyleOptionViewItemV4 optionIcon(option); optionIcon.rect.setX(option.rect.width()-height); optionIcon.rect.setWidth(height); bool showDelIcon = true; QVariant removable = index.data(ITEM_REMOVABLE_ROLE); if (removable.type() == QVariant::Bool) showDelIcon = removable.toBool(); if (showDelIcon) mDeleteIcon.paint(painter, optionIcon.rect); } }