示例#1
0
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);
}
示例#2
0
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);
    }
}