QListWidget 更改部分文本颜色

3

点击此处打开示例图片,红色箭头是我想要的,但输出结果只显示了所有代码,并且与蓝色箭头一样不起作用。

我尝试在 QListWidget 中使用 <font color=red>...</font>||<span>...</span>,但没有任何效果。

我的目标是实现以下效果:

item1 <font color=red>apple</font> ("item1" black, "apple" will output as red color)
item2 <font color=green>durian</font> (durian will output as green color)

有人能帮忙吗?

顺便说一句,我真正想要的是下面的图片: 当我输入单词“cola”时,QListwidget 的列表将会把“%cola%”改为不同的颜色。

1个回答

4

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

然后使用QListWidgetsetItemDelegate()方法,如下所示:

ui->listWidget->setItemDelegate(new HtmlDelegate);

获取以下图像中显示的内容:

enter image description here

完整示例可在以下链接中找到:link

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接