Qt 部分文字变色

    业务需求,想要两个字符串比较的时候,不一样的字符标红。查了半天好像没有什么适合的函数,那就自己画吧

MRZLabel::MRZLabel(QWidget *parent):QLabel(parent)
{

}
void MRZLabel::drawText(const QString &s1,const QString &s2)
{
    m_str1 = s1;
    m_str2 = s2;
    update();
}

void MRZLabel::drawText(const QString &s1,const QString &s2,const QString &s3)
{
    m_str1 = s1;
    m_str2 = s2;
    m_str3 = s3;
    update();
}
void MRZLabel::set_Font(QFont f)
{
    m_font = f;
}
void MRZLabel::paintEvent(QPaintEvent*)
{
    QPainter painter(this);

    //painter.setRenderHint(QPainter::Antialiasing, true);
    painter.setPen(Qt::black);
    painter.setFont(m_font);
    painter.drawText(this->rect(), m_str1);

    //
    painter.setPen(Qt::red);
    QRect ret1(painter.fontMetrics().width(m_str1),0,this->width(),this->height());
    painter.drawText(ret1,m_str2);

    painter.setPen(Qt::black);
    QRect ret2(painter.fontMetrics().width(m_str1+m_str2),0,this->width(),this->height());
    painter.drawText(ret2,m_str3);
}
    MRZLabel label;
    label.setFixedSize(1500,455);
    label.set_Font(QFont("宋体",15));
    label.drawText(QStringLiteral("大家的设计"),"dadasdsacac",QStringLiteral("的祭祀"));
    label.show();
运行一下。

Qt 部分文字变色_第1张图片

上面的是效果图,很简单的实现,记录一下

你可能感兴趣的:(C++/QT)