gpt4 book ai didi

c++ - 将 QString 绘制到 QImage 对象上时出现对齐问题

转载 作者:行者123 更新时间:2023-12-01 23:29:12 26 4
gpt4 key购买 nike

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

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(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");

这些是我的结果:

默认字体:
Default font

Courier字体:
Courier font

关于c++ - 将 QString 绘制到 QImage 对象上时出现对齐问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58623379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com