![](/img/trans.png)
[英]Determine which pixels of QImage were changed while painting on it with QPainter
[英]Alignment problems while painting QString onto the QImage object
我想創建一個將打印在屏幕上的字符串。 每次打印的變量值發生變化時,我都會更新此字符串。 每個數字的位數可以不同,每個數字的符號可能隨時間而變化。 我想要保持不變的是數字精度。 我期望的 output 是這樣的(每行對應相同的字符串,僅更新):
X: 453.432 Y: 543.432
X: -5.432 Y: 4.432
X: 43.234 Y: -123.423
即,字母和點應始終位於屏幕上的同一位置。
目前我使用此代碼進行字符串更新,但 Y 的 position 和點會隨着位數的變化而變化。 有沒有簡單的方法來實現它?
text = QString("X: %1 Y: %2").arg( QString::number( x(), 'f', 3 ),
QString::number( y(), 'f', 3 ) );
- - - - - - - - - 編輯 - - - - - - - - -
按照答案,我創建了一個具有恆定間距(實際上是恆定長度)的字符串。 雖然它並沒有完全解決我的問題。
在下一步中,我獲取字符串text
並使用QPainter
將其繪制到QImage
object 上。 我在這里遇到的問題是,盡管字符串長度始終相同,但數字的寬度與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");
這些是我的結果:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.