将QString绘制到QImage对象上时的对齐问题

问题描述 投票:4回答:1

我想创建一个将在屏幕上打印的字符串。每当打印的变量值更改时,我都会更新此字符串。每个数字中的位数可能会不同,并且每个数字的符号可能会随时间变化。我想要保持不变的是数字精度。我期望的输出是这样的(每行对应于同一字符串,仅更新):

X:  453.432  Y:  543.432
X:   -5.432  Y:    4.432
X:   43.234  Y: -123.423

即字母和点应始终位于屏幕上的同一位置。

目前,我使用此代码进行字符串更新,但是如果位数改变,则Y和点的位置也会发生变化。有没有简单的实现方法?

text = QString("X: %1   Y: %2").arg( QString::number( x(), 'f', 3 ),
                                     QString::number( y(), 'f', 3 ) );

------------------编辑------------------

跟随answer,我创建了一个具有恒定间距(实际上是恒定长度)的字符串。它并不能完全解决我的问题。

下一步,我将字符串text并使用QPainter将其绘制到QImage对象上。我在这里遇到的问题是,尽管字符串长度始终相同,但数字的宽度与QPainter所画的空格('')和'-'符号的宽度不同。因此,当数字位数更改时,点的位置和'Y'符号也会更改。

这是我用于图像创建的代码:

QImage img( 100, 100, QImage::Format_ARGB32_Premultiplied ); 
img.fill( Qt::transparent );

QPainter painter( &img );

QPen pen;
pen.setColor( Qt::darkBlue );
painter.setPen(pen);

QFont font = painter.font();
font.setBold( true );
font.setPointSize( 10 );
painter.setFont( font );

QString text = QString("X:%1   Y:%2")
    .arg( x(), 9, 'f', 3, ' ' )
    .arg( y(), 9, 'f', 3, ' ' );
painter.drawText( QPointF(0, 50), text );
painter.end();
c++ qt
1个回答
3
投票

您可以使用arg方法的此签名:

arg

关于您的第二个问题,我通过更改字体系列来解决。

// arg(double a, int fieldWidth, char format, int precision, QChar fillChar)
QString formated = QString("X:%1 Y:%2")
    .arg(x(), 9, 'f', 3, ' ')
    .arg(y(), 9, 'f', 3, ' ');

这些是我的结果:

默认字体:font.setFamily("Courier");

Courier字体:Default font

© www.soinside.com 2019 - 2024. All rights reserved.