void HtmlDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,const QModelIndex &index) const { QStyleOptionViewItemV4 optionV4(option); initStyleOption(&optionV4, index); QStyle *style = optionV4.widget ? optionV4.widget->style() : QApplication::style(); style->drawPrimitive(QStyle::PE_PanelItemViewItem, &optionV4, painter, optionV4.widget); QTextDocument doc; QString text = optionV4.text; doc.setHtml(text); doc.setPageSize( option.rect.size() ); /// Painting item without text optionV4.text.clear(); style->drawControl(QStyle::CE_ItemViewItem, &optionV4, painter); QAbstractTextDocumentLayout::PaintContext ctx; // Highlighting text if item is selected if (optionV4.state & QStyle::State_Selected) ctx.palette.setColor(QPalette::Text, optionV4.palette.color(QPalette::Active, QPalette::HighlightedText)); QRect textRect = option.rect; painter->save(); painter->translate(textRect.topLeft()); painter->setClipRect(textRect.translated(-textRect.topLeft())); doc.documentLayout()->draw(painter, ctx); painter->restore(); }
bool RenderThemeQt::paintButton(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r) { QStyle* style = 0; QPainter* painter = 0; QWidget* widget = 0; if (!getStylePainterAndWidgetFromPaintInfo(i, style, painter, widget)) return true; QStyleOptionButton option; option.initFrom(widget); option.rect = r; // Get the correct theme data for a button EAppearance appearance = applyTheme(option, o); if(appearance == PushButtonAppearance || appearance == ButtonAppearance) style->drawControl(QStyle::CE_PushButton, &option, painter); else if(appearance == RadioAppearance) style->drawControl(QStyle::CE_RadioButton, &option, painter); else if(appearance == CheckboxAppearance) style->drawControl(QStyle::CE_CheckBox, &option, painter); return false; }
/*! Paints the week scale header. * \sa paintHeader() */ void DateTimeGrid::paintWeekScaleHeader( QPainter* painter, const QRectF& headerRect, const QRectF& exposedRect, qreal offset, QWidget* widget ) { QStyle* style = widget?widget->style():QApplication::style(); // Paint a section for each week QDateTime sdt = d->chartXtoDateTime( offset+exposedRect.left() ); sdt.setTime( QTime( 0, 0, 0, 0 ) ); // Go backwards until start of week while ( sdt.date().dayOfWeek() != d->weekStart ) sdt = sdt.addDays( -1 ); QDateTime dt = sdt; for ( qreal x = d->dateTimeToChartX( dt ); x < exposedRect.right()+offset; dt = dt.addDays( 7 ),x=d->dateTimeToChartX( dt ) ) { QStyleOptionHeader opt; opt.init( widget ); opt.rect = QRectF( x-offset, headerRect.top()+headerRect.height()/2., dayWidth()*7, headerRect.height()/2. ).toRect(); opt.text = QString::number( dt.date().weekNumber() ); opt.textAlignment = Qt::AlignCenter; // NOTE:CE_Header does not honor clipRegion(), so we do the CE_Header logic here style->drawControl( QStyle::CE_HeaderSection, &opt, painter, widget ); QStyleOptionHeader subopt = opt; subopt.rect = style->subElementRect( QStyle::SE_HeaderLabel, &opt, widget ); if ( subopt.rect.isValid() ) { style->drawControl( QStyle::CE_HeaderLabel, &subopt, painter, widget ); } } // Paint a section for each month dt = sdt; for ( qreal x2 = d->dateTimeToChartX( dt ); x2 < exposedRect.right()+offset; x2=d->dateTimeToChartX( dt ) ) { //qDebug()<<"paintWeekScaleHeader()"<<dt; QDate next = dt.date().addMonths( 1 ); next = next.addDays( 1 - next.day() ); QStyleOptionHeader opt; opt.init( widget ); opt.rect = QRectF( x2-offset, headerRect.top(), dayWidth()*dt.date().daysTo( next ), headerRect.height()/2. ).toRect(); opt.text = QDate::longMonthName( dt.date().month() ); opt.textAlignment = Qt::AlignCenter; // NOTE:CE_Header does not honor clipRegion(), so we do the CE_Header logic here style->drawControl( QStyle::CE_HeaderSection, &opt, painter, widget ); QStyleOptionHeader subopt = opt; subopt.rect = style->subElementRect( QStyle::SE_HeaderLabel, &opt, widget ); if ( subopt.rect.isValid() ) { style->drawControl( QStyle::CE_HeaderLabel, &subopt, painter, widget ); } dt.setDate( next ); } }
void LevelDelegate::paint (QPainter * painter, QStyleOptionViewItem const & option, QModelIndex const & index) const { //if (m_app_data && m_app_data->getDictCtx().m_names.size()) painter->save(); QStyleOptionViewItemV4 option4 = option; initStyleOption(&option4, index); if (index.column() == 0) { QVariant value = index.data(Qt::DisplayRole); if (value.isValid() && !value.isNull()) { QString const qs = value.toString(); int const lvl = qs.toInt(); // @TODO: this should be exchanged via dictionnary in future if (lvl >= 0 && lvl < trace::e_max_trace_level) { option4.text = QString::fromLatin1(trace::enumToString(static_cast<trace::E_TraceLevel>(lvl))); } if (QWidget const * widget = option4.widget) { QStyle * style = widget->style(); style->drawControl(QStyle::CE_ItemViewItem, &option4, painter, widget); } } } else if (index.column() == 1) { QVariant value = index.data(Qt::DisplayRole); if (value.isValid() && !value.isNull()) { QString const qs = value.toString(); E_LevelMode const mode = stringToLvlMod(qs.at(0).toLatin1()); QString const verbose = lvlmodsStr[mode]; option4.text = verbose; if (QWidget const * widget = option4.widget) { QStyle * style = widget->style(); style->drawControl(QStyle::CE_ItemViewItem, &option4, painter, widget); } } } else QStyledItemDelegate::paint(painter, option4, index); painter->restore(); }
void ChatDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { QStyleOptionViewItemV4 optionV4(option); this->initStyleOption(&optionV4, index); optionV4.state = option.state & (~QStyle::State_HasFocus); QStyle* style = optionV4.widget ? optionV4.widget->style() : QApplication::style(); this->textDocument.setHtml(optionV4.text); this->textDocument.setTextWidth(optionV4.rect.width()); optionV4.text = QString(); style->drawControl(QStyle::CE_ItemViewItem, &optionV4, painter, optionV4.widget); QAbstractTextDocumentLayout::PaintContext ctx; ctx.palette = optionV4.palette; // Highlighting text if item is selected. if (optionV4.state & QStyle::State_Selected && optionV4.state & QStyle::State_Active) ctx.palette.setColor(QPalette::Text, optionV4.palette.color(QPalette::Active, QPalette::HighlightedText)); QRect textRect = style->subElementRect(QStyle::SE_ItemViewItemText, &optionV4); painter->save(); painter->translate(textRect.topLeft()); painter->setClipRect(textRect.translated(-textRect.topLeft())); this->textDocument.documentLayout()->draw(painter, ctx); painter->restore(); }
void SqlSearchDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionViewItemV4 optionV4 = option; initStyleOption(&optionV4, index); QStyle *style = optionV4.widget? optionV4.widget->style() : QApplication::style(); QTextDocument doc; doc.setHtml(optionV4.text); optionV4.text = QString(); style->drawControl(QStyle::CE_ItemViewItem, &optionV4, painter); QAbstractTextDocumentLayout::PaintContext ctx; QPalette::ColorGroup cg = (option.state & QStyle::State_Enabled) ? (option.state & QStyle::State_Active) ? QPalette::Normal : QPalette::Inactive : QPalette::Disabled; if (optionV4.state & QStyle::State_Selected) ctx.palette.setColor(QPalette::Text, optionV4.palette.color(cg, QPalette::HighlightedText)); else ctx.palette.setColor(QPalette::Text, optionV4.palette.color(cg, QPalette::WindowText)); QRect textRect = style->subElementRect(QStyle::SE_ItemViewItemText, &optionV4); painter->save(); painter->translate(textRect.topLeft()); painter->setClipRect(textRect.translated(-textRect.topLeft())); doc.documentLayout()->draw(painter, ctx); painter->restore(); }
void LogbookDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const { QStyle * style; QStyleOptionViewItemV4 opt(option); initStyleOption(& opt, index); // Remove the Focus Rectangle opt.state &= ~(QStyle::State_HasFocus); // Make the Text Uppercase for Root Items if (! index.parent().isValid()) { opt.font.setBold(true); opt.font.setCapitalization(QFont::AllUppercase); opt.palette.setColor(QPalette::Text, Qt::darkGray); } // Draw the Item if (opt.widget == NULL) style = QApplication::style(); else style = opt.widget->style(); style->drawControl(QStyle::CE_ItemViewItem, & opt, painter, opt.widget); }
void LogDelegate::paintTokenized (QPainter * painter, QStyleOptionViewItemV4 & option4, QModelIndex const & index, QString const & separator, QString const & out_separator, int level) const { QVariant value = index.data(Qt::DisplayRole); if (value.isValid() && !value.isNull()) { QStringList list = value.toString().split(QRegExp(separator), QString::SkipEmptyParts); if (level < list.size()) { QString p; for (int i = list.size() - level, ie = list.size(); i < ie; ++i) { if (i > 0) p.append(out_separator); p.append(list.at(i)); } option4.text = p; } QWidget const * widget = option4.widget; if (widget) { QStyle * style = widget->style(); style->drawControl(QStyle::CE_ItemViewItem, &option4, painter, widget); } } }
// static void StarEditor::renderHelper(QPainter* painter, QTableView* pTableView, const QStyleOptionViewItemV4& option, StarRating* pStarRating) { painter->save(); painter->setClipRect(option.rect); if (pTableView != NULL) { QStyle* style = pTableView->style(); if (style != NULL) { style->drawControl(QStyle::CE_ItemViewItem, &option, painter, pTableView); } } // Set the palette appropriately based on whether the row is selected or // not. We also have to check if it is inactive or not and use the // appropriate ColorGroup. QPalette::ColorGroup cg = option.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; if (cg == QPalette::Normal && !(option.state & QStyle::State_Active)) cg = QPalette::Inactive; if (option.state & QStyle::State_Selected) { painter->setBrush(option.palette.color(cg, QPalette::HighlightedText)); } else { painter->setBrush(option.palette.color(cg, QPalette::Text)); } pStarRating->paint(painter, option.rect); painter->restore(); }
//////// delegate void ScriptDelegate::paint (QPainter * painter, QStyleOptionViewItem const & option, QModelIndex const & index) const { painter->save(); QStyleOptionViewItemV4 option4 = option; initStyleOption(&option4, index); if (index.column() == 1) { QVariant value = index.data(Qt::DisplayRole); if (value.isValid() && !value.isNull()) { QString const qs = value.toString(); E_FilterMode const mode = stringToFltMod(qs.at(0).toLatin1()); QString const verbose = fltmodsStr[mode]; option4.text = verbose; if (QWidget const * widget = option4.widget) { QStyle * style = widget->style(); style->drawControl(QStyle::CE_ItemViewItem, &option4, painter, widget); } } } else QStyledItemDelegate::paint(painter, option4, index); painter->restore(); }
void KoDocumentSectionDelegate::drawProgressBar(QPainter *p, const QStyleOptionViewItem &option, const QModelIndex &index) const { QVariant value = index.data(KoDocumentSectionModel::ProgressRole); if (!value.isNull() && (value.toInt() >= 0 && value.toInt() <= 100)) { const QRect r = progressBarRect(option, index).translated(option.rect.topLeft()); p->save(); { p->setClipRect(r); QStyle* style = QApplication::style(); QStyleOptionProgressBarV2 opt; opt.minimum = 0; opt.maximum = 100; opt.progress = value.toInt(); opt.textVisible = true; opt.textAlignment = Qt::AlignHCenter; opt.text = QObject::tr("%1 %").arg(opt.progress); opt.rect = r; opt.orientation = Qt::Horizontal; opt.state = option.state; style->drawControl(QStyle::CE_ProgressBar, &opt, p, 0); } p->restore(); } }
void MessageViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionViewItemV4 optionV4 = option; initStyleOption(&optionV4, index); QStyle *style = optionV4.widget? optionV4.widget->style() : QApplication::style(); QTextDocument doc; QString align(index.data(MessageModel::TypeRole) == 1 ? "left" : "right"); QString html = "<p align=\"" + align + "\" style=\"color:black;\">" + index.data(MessageModel::HTMLRole).toString() + "</p>"; doc.setHtml(html); /// Painting item without text optionV4.text = QString(); style->drawControl(QStyle::CE_ItemViewItem, &optionV4, painter); QAbstractTextDocumentLayout::PaintContext ctx; // Highlighting text if item is selected if (optionV4.state & QStyle::State_Selected) ctx.palette.setColor(QPalette::Text, optionV4.palette.color(QPalette::Active, QPalette::HighlightedText)); QRect textRect = style->subElementRect(QStyle::SE_ItemViewItemText, &optionV4); doc.setTextWidth( textRect.width() ); painter->save(); painter->translate(textRect.topLeft()); painter->setClipRect(textRect.translated(-textRect.topLeft())); doc.documentLayout()->draw(painter, ctx); painter->restore(); }
void ShortcutDelegate::drawDisplay(QPainter * painter, const QStyleOptionViewItem & option, const QRect & rect, const QString & text) const { QStyle *style = QApplication::style(); if (!style) QItemDelegate::drawDisplay(painter, option, rect, text); else if (text=="<internal: delete row>") { QStyleOptionButton sob; sob.text = tr("delete row"); sob.state = QStyle::State_Enabled; sob.rect = rect; style->drawControl(QStyle::CE_PushButton, &sob, painter); } else if (text=="<internal: add row>") { QStyleOptionButton sob; sob.text = tr("add row"); sob.state = QStyle::State_Enabled; sob.rect = rect; style->drawControl(QStyle::CE_PushButton, & sob, painter); } else QItemDelegate::drawDisplay(painter, option, rect, text); }
/*! Paints the day scale header. * \sa paintHeader() */ void DateTimeGrid::paintDayScaleHeader( QPainter* painter, const QRectF& headerRect, const QRectF& exposedRect, qreal offset, QWidget* widget ) { // For starters, support only the regular tab-per-day look QStyle* style = widget?widget->style():QApplication::style(); // Paint a section for each day QDateTime dt = d->chartXtoDateTime( offset+exposedRect.left() ); dt.setTime( QTime( 0, 0, 0, 0 ) ); for ( qreal x = d->dateTimeToChartX( dt ); x < exposedRect.right()+offset; dt = dt.addDays( 1 ),x=d->dateTimeToChartX( dt ) ) { QStyleOptionHeader opt; opt.init( widget ); opt.rect = QRectF( x-offset, headerRect.top()+headerRect.height()/2., dayWidth(), headerRect.height()/2. ).toRect(); opt.text = dt.toString( QString::fromAscii( "ddd" ) ).left( 1 ); opt.textAlignment = Qt::AlignCenter; // NOTE:CE_Header does not honor clipRegion(), so we do the CE_Header logic here style->drawControl( QStyle::CE_HeaderSection, &opt, painter, widget ); QStyleOptionHeader subopt = opt; subopt.rect = style->subElementRect( QStyle::SE_HeaderLabel, &opt, widget ); if ( subopt.rect.isValid() ) { style->drawControl( QStyle::CE_HeaderLabel, &subopt, painter, widget ); } } dt = d->chartXtoDateTime( offset+exposedRect.left() ); dt.setTime( QTime( 0, 0, 0, 0 ) ); // Go backwards until start of week while ( dt.date().dayOfWeek() != d->weekStart ) dt = dt.addDays( -1 ); // Paint a section for each week for ( qreal x2 = d->dateTimeToChartX( dt ); x2 < exposedRect.right()+offset; dt = dt.addDays( 7 ),x2=d->dateTimeToChartX( dt ) ) { QStyleOptionHeader opt; opt.init( widget ); opt.rect = QRectF( x2-offset, headerRect.top(), dayWidth()*7., headerRect.height()/2. ).toRect(); opt.text = QString::number( dt.date().weekNumber() ); opt.textAlignment = Qt::AlignCenter; // NOTE:CE_Header does not honor clipRegion(), so we do the CE_Header logic here style->drawControl( QStyle::CE_HeaderSection, &opt, painter, widget ); QStyleOptionHeader subopt = opt; subopt.rect = style->subElementRect( QStyle::SE_HeaderLabel, &opt, widget ); if ( subopt.rect.isValid() ) { style->drawControl( QStyle::CE_HeaderLabel, &subopt, painter, widget ); } } }
void ExpandingDelegate::drawBackground(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { Q_UNUSED(index) QStyleOptionViewItemV4 opt = option; //initStyleOption(&opt, index); //Problem: This isn't called at all, because drawBrackground is not virtual :-/ QStyle *style = model()->treeView()->style() ? model()->treeView()->style() : QApplication::style(); style->drawControl(QStyle::CE_ItemViewItem, &opt, painter); }
void KOTodoRichTextDelegate::paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const { if ( index.data( KOTodoModel::IsRichTextRole ).toBool() ) { QStyleOptionViewItemV4 opt = option; initStyleOption( &opt, index ); const QWidget *widget = opt.widget; QStyle *style = widget ? widget->style() : QApplication::style(); QRect textRect = style->subElementRect( QStyle::SE_ItemViewItemText, &opt, widget ); // draw the item without text opt.text.clear(); style->drawControl( QStyle::CE_ItemViewItem, &opt, painter, widget ); // draw the text (rich text) QPalette::ColorGroup cg = opt.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; if ( cg == QPalette::Normal && !( opt.state & QStyle::State_Active ) ) { cg = QPalette::Inactive; } if ( opt.state & QStyle::State_Selected ) { painter->setPen( QPen( opt.palette.brush( cg, QPalette::HighlightedText ), 0 ) ); } else { painter->setPen( QPen( opt.palette.brush( cg, QPalette::Text ), 0 ) ); } if ( opt.state & QStyle::State_Editing ) { painter->setPen( QPen( opt.palette.brush( cg, QPalette::Text ), 0 ) ); painter->drawRect( textRect.adjusted( 0, 0, -1, -1 ) ); } m_textDoc->setHtml( index.data().toString() ); painter->save(); painter->translate( textRect.topLeft() ); QRect tmpRect = textRect; tmpRect.moveTo( 0, 0 ); m_textDoc->setTextWidth( tmpRect.width() ); m_textDoc->drawContents( painter, tmpRect ); painter->restore(); } else { // align the text at top so that when it has more than two lines // it will just cut the extra lines out instead of aligning centered vertically QStyleOptionViewItem copy = option; copy.displayAlignment = Qt::AlignLeft | Qt::AlignTop; QStyledItemDelegate::paint( painter, copy, index ); } }
/*! Paints the hour scale header. * \sa paintHeader() */ void DateTimeGrid::paintHourScaleHeader( QPainter* painter, const QRectF& headerRect, const QRectF& exposedRect, qreal offset, QWidget* widget ) { QStyle* style = widget?widget->style():QApplication::style(); // Paint a section for each hour QDateTime dt = d->chartXtoDateTime( offset+exposedRect.left() ); dt.setTime( QTime( dt.time().hour(), 0, 0, 0 ) ); for ( qreal x = d->dateTimeToChartX( dt ); x < exposedRect.right()+offset; dt = dt.addSecs( 60*60 /*1 hour*/ ),x=d->dateTimeToChartX( dt ) ) { QStyleOptionHeader opt; opt.init( widget ); opt.rect = QRectF( x-offset, headerRect.top()+headerRect.height()/2., dayWidth()/24., headerRect.height()/2. ).toRect(); opt.text = dt.time().toString( QString::fromAscii( "hh" ) ); opt.textAlignment = Qt::AlignCenter; // NOTE:CE_Header does not honor clipRegion(), so we do the CE_Header logic here style->drawControl( QStyle::CE_HeaderSection, &opt, painter, widget ); QStyleOptionHeader subopt = opt; subopt.rect = style->subElementRect( QStyle::SE_HeaderLabel, &opt, widget ); if ( subopt.rect.isValid() ) { style->drawControl( QStyle::CE_HeaderLabel, &subopt, painter, widget ); } } dt = d->chartXtoDateTime( offset+exposedRect.left() ); dt.setTime( QTime( 0, 0, 0, 0 ) ); // Paint a section for each day for ( qreal x2 = d->dateTimeToChartX( dt ); x2 < exposedRect.right()+offset; dt = dt.addDays( 1 ),x2=d->dateTimeToChartX( dt ) ) { QStyleOptionHeader opt; opt.init( widget ); opt.rect = QRectF( x2-offset, headerRect.top(), dayWidth(), headerRect.height()/2. ).toRect(); opt.text = QDate::longDayName( dt.date().dayOfWeek() ); opt.textAlignment = Qt::AlignCenter; // NOTE:CE_Header does not honor clipRegion(), so we do the CE_Header logic here style->drawControl( QStyle::CE_HeaderSection, &opt, painter, widget ); QStyleOptionHeader subopt = opt; subopt.rect = style->subElementRect( QStyle::SE_HeaderLabel, &opt, widget ); if ( subopt.rect.isValid() ) { style->drawControl( QStyle::CE_HeaderLabel, &subopt, painter, widget ); } } }
void ItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionViewItem opt = option; opt.text = defaultDisplayText(index); initStyleOption(&opt, index); const QWidget *widget = this->widget(option); QStyle *style = this->style(option); style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget); }
void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const override { QStyle *style = option.widget ? option.widget->style() : QApplication::style(); QString text = index.model()->data(index, static_cast<int>(AppRole::Display)).toString(); QStyleOptionViewItem opt = option; initStyleOption(&opt, index); opt.text = text; style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, option.widget); }
/*! Renders the delegate using the given \a painter and style \a option for the item specified by \a index. This function paints the item using the view's QStyle. When reimplementing paint in a subclass. Use the initStyleOption() to set up the \a option in the same way as the QStyledItemDelegate. Whenever possible, use the \a option while painting. Especially its \l{QStyleOption::}{rect} variable to decide where to draw and its \l{QStyleOption::}{state} to determine if it is enabled or selected. After painting, you should ensure that the painter is returned to the state it was supplied in when this function was called. For example, it may be useful to call QPainter::save() before painting and QPainter::restore() afterwards. \sa QItemDelegate::paint(), QStyle::drawControl(), QStyle::CE_ItemViewItem */ void QStyledItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { Q_ASSERT(index.isValid()); QStyleOptionViewItem opt = option; initStyleOption(&opt, index); const QWidget *widget = QStyledItemDelegatePrivate::widget(option); QStyle *style = widget ? widget->style() : QApplication::style(); style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget); }
/*! \reimp */ void QToolBar::paintEvent(QPaintEvent *) { Q_D(QToolBar); QPainter p(this); QStyle *style = this->style(); QStyleOptionToolBar opt; initStyleOption(&opt); if (d->layout->expanded || d->layout->animating || isWindow()) { //if the toolbar is expended, we need to fill the background with the window color //because some styles may expects that. p.fillRect(opt.rect, palette().background()); style->drawControl(QStyle::CE_ToolBar, &opt, &p, this); style->drawPrimitive(QStyle::PE_FrameMenu, &opt, &p, this); } else { style->drawControl(QStyle::CE_ToolBar, &opt, &p, this); } opt.rect = style->subElementRect(QStyle::SE_ToolBarHandle, &opt, this); if (opt.rect.isValid()) style->drawPrimitive(QStyle::PE_IndicatorToolBarHandle, &opt, &p, this); }
void ItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) QStyleOptionViewItem opt = option; #else QStyleOptionViewItemV4 opt = *qstyleoption_cast<const QStyleOptionViewItemV4*>(&option); #endif opt.text = defaultDisplayText(index); initStyleOption(&opt, index); const QWidget *widget = this->widget(option); QStyle *style = this->style(option); style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget); }
void HtmlDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { QStyleOptionViewItem opt = option; initStyleOption(&opt, index); QStyle* style = opt.widget ? opt.widget->style() : QApplication::style(); QAbstractItemView* parent = this->parent(); const int top = opt.rect.top(); const int height = opt.rect.height(); int left = opt.rect.left(); int width = opt.rect.width(); // the width of the item excluding the arrows but including the checkbox and icons if (opt.features & QStyleOptionViewItem::HasCheckIndicator) { const int padding = checkboxWidth(style, parent, opt); left += padding; width -= padding; } if (opt.features & QStyleOptionViewItem::HasDecoration) { const int padding = iconWidth(style, parent, opt); left += padding; width -= padding; } QTextDocument doc; // doc.setDefaultFont(QFont("Roboto", 9)); doc.setDefaultStyleSheet("ul { margin-left: -36px; } ol { margin-left: -28px; }"); doc.setTextWidth(width); doc.setHtml(opt.text); painter->save(); opt.text = ""; // draw the item but with empty text style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget); // the 4th argument is required for QStyle to determine the style used to paint the control painter->translate(left, top); QRect clip(0, 0, width, height); painter->setClipRect(clip); QAbstractTextDocumentLayout::PaintContext context; context.clip = clip; const QColor textColor = this->textColor(index); context.palette.setColor(QPalette::AlternateBase, Qt::yellow); if (textColor != QColor(Qt::black)) { context.palette.setColor(QPalette::Text, textColor); } doc.documentLayout()->draw(painter, context); painter->restore(); }
void LogDelegate::paintContext (QPainter * painter, QStyleOptionViewItemV4 & option4, QModelIndex const & index) const { QVariant const value = index.data(Qt::DisplayRole); if (value.isValid() && !value.isNull()) { Dict const & dict = m_app_data.getDictCtx(); option4.text = dict.findNameFor(value.toString()); QWidget const * widget = option4.widget; if (widget) { QStyle * style = widget->style(); style->drawControl(QStyle::CE_ItemViewItem, &option4, painter, widget); } } }
/* IgnoreListDelegate */ void IgnoreListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if(index.column() == 0) { QStyle *style = QApplication::style(); if(option.state & QStyle::State_Selected) painter->fillRect(option.rect, option.palette.highlight()); QStyleOptionButton opts; opts.direction = option.direction; opts.rect = option.rect; opts.rect.moveLeft(option.rect.center().rx()-10); opts.state = option.state; opts.state |= index.data().toBool() ? QStyle::State_On : QStyle::State_Off; style->drawControl(QStyle::CE_CheckBox, &opts, painter); } else QStyledItemDelegate::paint(painter, option, index); }
void ProgressDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { QFuture<void> future(index.data(Qt::DisplayRole).value<QFuture<void> >()); QStyleOptionProgressBarV2 progressOption; progressOption.minimum = future.progressMinimum(); progressOption.maximum = future.progressMaximum(); progressOption.progress = future.progressValue(); progressOption.orientation = Qt::Horizontal; progressOption.state = QStyle::State_Enabled | QStyle::State_Horizontal; progressOption.direction = option.direction; progressOption.fontMetrics = option.fontMetrics; progressOption.palette = option.palette; progressOption.rect = option.rect; m_style->drawControl(QStyle::CE_ProgressBar, &progressOption, painter); }
void ThumbnailBarItemDelegate::paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const { bool isSelected = option.state & QStyle::State_Selected; bool isCurrent = d->mView->selectionModel()->currentIndex() == index; QPixmap thumbnailPix = d->mView->thumbnailForIndex(index); QRect rect = option.rect; QStyleOptionViewItem opt = option; const QWidget* widget = opt.widget; QStyle* style = widget ? widget->style() : QApplication::style(); if (isSelected && !isCurrent) { // Draw selected but not current item backgrounds with some transparency // so that the current item stands out. painter->setOpacity(.33); } style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, widget); painter->setOpacity(1); // Draw thumbnail if (!thumbnailPix.isNull()) { QRect thumbnailRect = QRect( rect.left() + (rect.width() - thumbnailPix.width()) / 2, rect.top() + (rect.height() - thumbnailPix.height()) / 2 - 1, thumbnailPix.width(), thumbnailPix.height()); if (!thumbnailPix.hasAlphaChannel()) { d->drawShadow(painter, thumbnailRect); painter->setPen(d->mBorderColor); painter->setRenderHint(QPainter::Antialiasing, false); QRect borderRect = thumbnailRect.adjusted(-1, -1, 0, 0); painter->drawRect(borderRect); } painter->drawPixmap(thumbnailRect.left(), thumbnailRect.top(), thumbnailPix); // Draw busy indicator if (d->mView->isBusy(index)) { QPixmap pix = d->mView->busySequenceCurrentPixmap(); painter->drawPixmap( thumbnailRect.left() + (thumbnailRect.width() - pix.width()) / 2, thumbnailRect.top() + (thumbnailRect.height() - pix.height()) / 2, pix); } } }
void BudgetEntityDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (index.column() != 0 || !index.data().canConvert<BudgetEntity>()) { QStyledItemDelegate::paint(painter, option, index); return; } BudgetEntity entity = qvariant_cast<BudgetEntity>(index.data()); painter->save(); painter->setRenderHint(QPainter::Antialiasing); QLocale locale; QStyleOptionViewItemV4 opt = option; QStyledItemDelegate::initStyleOption(&opt, index); QRect rect = opt.rect; opt.text = ""; QStyle *style = opt.widget ? opt.widget->style() : QApplication::style(); style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget); QPalette::ColorGroup cg = opt.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; if (opt.state & QStyle::State_Selected) { painter->setPen(opt.palette.color(cg, QPalette::HighlightedText)); } else { painter->setPen(opt.palette.color(cg, QPalette::Text)); } if (dateWidth <= 0) { QDate _date = QDate(9999, 12, 29); //*((int*)(&dateWidth)) = painter->fontMetrics().width(_date.toString(locale.dateFormat(QLocale::ShortFormat))) + 10; dateWidth = painter->fontMetrics().width(_date.toString(locale.dateFormat(QLocale::ShortFormat))) + 10;; } QString amount = locale.toCurrencyString(entity.amount(), locale.currencySymbol(QLocale::CurrencySymbol)); int amountWidth = painter->fontMetrics().width(amount); QRect adj = rect.adjusted(3, rect.height()/3, -3, rect.height()/3); painter->drawText(adj.adjusted(0, 0, -amountWidth, 0), Qt::TextSingleLine, entity.date().toString(locale.dateFormat(QLocale::ShortFormat))); painter->drawText(adj.adjusted(adj.left() + dateWidth, 0, -amountWidth, 0), Qt::TextWordWrap, entity.description()); painter->drawText(adj.adjusted(adj.left() + dateWidth + amountWidth, 0, 0, 0), Qt::AlignRight | Qt::TextSingleLine, amount); painter->restore(); }
void ItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { int row = index.row(); ItemWidget *w = m_cache[row]; if (w == NULL) return; const QRect &rect = option.rect; bool isSelected = option.state & QStyle::State_Selected; /* render background (selected, alternate, ...) */ QStyle *style = m_view->style(); style->drawControl(QStyle::CE_ItemViewItem, &option, painter, m_view); /* render number */ if (m_showRowNumber) { const QString num = QString::number(row); QPalette::ColorRole role = isSelected ? QPalette::HighlightedText : QPalette::Text; painter->save(); painter->setFont(m_rowNumberFont); style->drawItemText(painter, rect.translated(m_hMargin / 2, m_vMargin), 0, m_rowNumberPalette, true, num, role); painter->restore(); } /* highlight search string */ w->setHighlight(m_re, m_foundFont, m_foundPalette); /* text color for selected/unselected item */ QWidget *ww = w->widget(); if ( ww->property(propertySelectedItem) != isSelected ) { ww->setProperty(propertySelectedItem, isSelected); if ( !ww->property("CopyQ_no_style").toBool() ) { ww->setStyle(style); foreach (QWidget *child, ww->findChildren<QWidget *>()) child->setStyle(style); ww->update(); } } }
void AnnotatedItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { auto opt = option; initStyleOption(&opt, index); QStyle *style = QApplication::style(); style->drawPrimitive(QStyle::PE_PanelItemViewItem, &opt, painter, opt.widget); style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget); QString annotation = index.data(m_annotationRole).toString(); if (!annotation.isEmpty()) { int newlinePos = annotation.indexOf(QLatin1Char('\n')); if (newlinePos != -1) { // print first line with '...' at end const QChar ellipsisChar(0x2026); annotation = annotation.left(newlinePos) + ellipsisChar; } QPalette disabled(opt.palette); disabled.setCurrentColorGroup(QPalette::Disabled); painter->save(); painter->setPen(disabled.color(QPalette::WindowText)); static int extra = opt.fontMetrics.width(m_delimiter) + 10; const QPixmap &pixmap = opt.icon.pixmap(opt.decorationSize); const QRect &iconRect = style->itemPixmapRect(opt.rect, opt.decorationAlignment, pixmap); const QRect &displayRect = style->itemTextRect(opt.fontMetrics, opt.rect, opt.displayAlignment, true, index.data(Qt::DisplayRole).toString()); QRect annotationRect = style->itemTextRect(opt.fontMetrics, opt.rect, opt.displayAlignment, true, annotation); annotationRect.adjust(iconRect.width() + displayRect.width() + extra, 0, iconRect.width() + displayRect.width() + extra, 0); QApplication::style()->drawItemText(painter, annotationRect, Qt::AlignLeft | Qt::AlignBottom, disabled, true, annotation); painter->restore(); } }