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