How to make item view render rich (html) text in Qt

来源:互联网 发布:s3c2410数据手册 编辑:程序博客网 时间:2024/05/17 04:25
class HtmlDelegate : public QStyledItemDelegate{protected:    void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const;    QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const;};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();    QTextDocument doc;    doc.setHtml(optionV4.text);    /// 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);    painter->save();    painter->translate(textRect.topLeft());    painter->setClipRect(textRect.translated(-textRect.topLeft()));    doc.documentLayout()->draw(painter, ctx);    painter->restore();}


原创粉丝点击