void ItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (index.data(Qt::AccessibleDescriptionRole).toString() == QLatin1String("separator")) { if (option.state.testFlag(QStyle::State_Selected)) { painter->fillRect(option.rect, option.palette.brush((option.state.testFlag(QStyle::State_Enabled) ? (option.state.testFlag(QStyle::State_Active) ? QPalette::Normal : QPalette::Inactive) : QPalette::Disabled), QPalette::Highlight)); } QStyleOptionFrame frameOption; frameOption.palette = option.palette; frameOption.rect = option.rect; frameOption.state = option.state; frameOption.frameShape = QFrame::HLine; QApplication::style()->drawControl(QStyle::CE_ShapedFrame, &frameOption, painter, 0); return; } if (index.data(Qt::FontRole).isValid()) { QStyleOptionViewItem mutableOption(option); mutableOption.font = index.data(Qt::FontRole).value<QFont>(); QStyledItemDelegate::paint(painter, mutableOption, index); return; } QStyledItemDelegate::paint(painter, option, index); }
void AddressDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { drawBackground(painter, option, index); QRect titleRectangle = option.rect; titleRectangle.setLeft(m_isAddressField ? 33 : (option.rect.height() + 1)); QRect decorationRectangle = option.rect; decorationRectangle.setRight(titleRectangle.left()); decorationRectangle = decorationRectangle.marginsRemoved(QMargins(2, 2, 2, 2)); QIcon icon(index.data(Qt::DecorationRole).value<QIcon>()); if (icon.isNull()) { icon = ThemesManager::getIcon(QLatin1String("tab")); } icon.paint(painter, decorationRectangle, option.decorationAlignment); const QString url(index.data(Qt::DisplayRole).toString()); if (m_isAddressField) { QStyleOptionViewItem mutableOption(option); mutableOption.palette.setColor(QPalette::Text, option.palette.color(QPalette::Link)); drawDisplay(painter, mutableOption, titleRectangle, url); if (!index.data(Qt::UserRole + 1).isNull()) { const int urlLength = option.fontMetrics.width(url + QLatin1Char(' ')); if (urlLength < titleRectangle.width()) { titleRectangle.setLeft(titleRectangle.left() + urlLength); drawDisplay(painter, option, titleRectangle, QLatin1String("- ") + index.data(Qt::UserRole + 1).toString()); } } } else { drawDisplay(painter, option, titleRectangle, url); } }