QListWidget更改文本的部分颜色

时间:2017-09-13 05:53:51

标签: c++ qt qt5 qlistwidget

单击此处打开示例图片,红色箭头是我想要的,但输出只显示所有代码,并且没有像蓝箭那样工作

我尝试在QListWidget中使用[graphite] host = 127.0.0.1 // ... ,但没有任何效果

我想要的是:

< font color = red >...< /font > || < span >...< /span >

任何人都可以提供帮助吗?

Ps:我真正想要的是下图: 当我输入单词&#34; cola&#34;时,QListwidget列表将突出显示/更改颜色&#34;%cola%&#34;变成不同的颜色。

1 个答案:

答案 0 :(得分:1)

默认情况下,

QListWidget不会呈现Html,但是对于此Qt,它具有允许自定义视图的委托类。

在这种情况下,我们使用以下代理:

#ifndef HTMLDELEGATE_H
#define HTMLDELEGATE_H

#include <QPainter>
#include <QStyledItemDelegate>
#include <QTextDocument>

class HtmlDelegate : public QStyledItemDelegate
{
public:
    void paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const
    {
        QStyleOptionViewItem options = option;
        initStyleOption(&options, index);

        painter->save();

        QTextDocument doc;
        doc.setHtml(options.text);

        options.text = "";
        options.widget->style()->drawControl(QStyle::CE_ItemViewItem, &options, painter);

        painter->translate(options.rect.left(), options.rect.top());
        QRect clip(0, 0, options.rect.width(), options.rect.height());
        doc.drawContents(painter, clip);
        painter->restore();
    }

    QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const
    {
        QStyleOptionViewItem options = option;
        initStyleOption(&options, index);

        QTextDocument doc;
        doc.setHtml(options.text);
        doc.setTextWidth(options.rect.width());
        return QSize(doc.idealWidth(), doc.size().height());
    }
};

#endif // HTMLDELEGATE_H

然后使用setItemDelegate()的{​​{1}}方法,如下所示:

QListWidget

获取下图中显示的内容:

enter image description here

完整示例可在以下link找到。