簡體   English   中英

Alignment 在將 QString 繪制到 QImage 上時出現問題 object

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM