QPainter,为文本部分分配不同的颜色

QPainter, assigning different colors to text parts

本文关键字:颜色 分配 文本部 QPainter      更新时间:2023-10-16

我有下面的代码显示一些文本通过QPainter

QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(QColor(10, 10, 10, 255)); // text color
painter.fillRect(QRect(10, 10, 200, 100), QColor(100, 100, 100, 120)); //rectangular color
painter.setFont(font);
painter.drawText(20, 20,  "1 2 3 4");

我想通过不同的颜色显示文本的每个部分,例如1为黑色,2为白色,3为蓝色,4为红色。所有的文字应该在同一行。我该怎么做呢?

我不知道任何Qt类/函数为您做这项工作,所以您可以自己做:

QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.fillRect(QRect(10, 10, 200, 100), QColor(100, 100, 100, 120)); //rectangular color

QColor  colors [ 3 ]        = { QColor(255, 0, 0, 255), QColor(0, 255, 0, 255), QColor(0, 0, 255, 255) };
QString texts [ 3 ]         = { "1", "2", "3" };
QFontMetrics fontmetrics    ( painter.font () );
int     y                   = 20,
        x                   = 20;
for ( int i = 0; i < 3; ++ i )
{
    painter.setPen ( colors [ i ] );
    painter.drawText ( x, y, texts [ i ] );
    x += fontmetrics.width ( texts [ i ] );
}

上面的代码使用QFontMetrics来计算插入文本的像素长度,然后将其添加到x中作为下一个字符串。