2015-09-04 967 views
0

我想做一個相當簡單的繪圖,在圓圈中心寫上兩段文字。我的代碼:QPainter與Qt :: AlignCenter不能正確居中文本

painter->drawText(QRectF(0, 0, m_iSize, m_iSize), Qt::AlignCenter, m_sAlias + "\n" + m_sCode); 

其中m_iSize是圓的大小,m_sAlias就像「R1」和m_sCode短文本是像「31」另一個短文本。

問題是,上面的代碼將繪製兩行文本,以便它們在水平方向上恰好相隔一個像素。不幸的是它清晰可見。我懷疑「\ n」必須對它做些什麼,但我不知道。也沒有如何解決它。

我目前的解決方法是分別繪製的文本是這樣的:

painter->drawText(QRectF(1, 0, m_iSize, m_iSize), Qt::AlignCenter, m_sAlias + "\n"); 
    painter->drawText(QRectF(0, 0, m_iSize, m_iSize), Qt::AlignCenter, "\n" + m_sCode); 

但是,這僅僅是愚蠢的,即使它actully按預期工作(我移頂部的文本一個像素向右)。

我在這裏錯過了什麼?如果需要,我可以提供截圖。

屏幕截圖:

錯誤(第一個行代碼),線通過一個像素從移動彼此

正確(第二兩行碼),線對齊正確

+0

這將很高興有一個截圖。 –

+0

在哪個平臺上,以什麼尺寸,字體......你做這個順便說一句嗎?我無法重現這一點。 –

+0

@marius_linux添加了一些屏幕截圖(您可能需要放大以更清晰地看到它,但即使在這種尺寸下,它也是可見的,尤其是比較)。我在Windows 8 64位上使用QW 5.5與MingW(32位)。我不設置任何字體,大小或其他任何內容,因此它是默認值。如果重要的話,我正在使用Qt的融合風格。 – Resurrection

回答

0

我無法重現這個問題,但我在不同的系統具有不同的默認字體。這可能是因爲你正在使用的字體爲新的行字符指定了1 px寬度,或者Qt像這樣誤解了它。你一定要嘗試使用另一種字體。

無論如何,你可以使用此解決方法來代替:

painter->drawText(QRectF(0, 0, m_iSize, m_iSize), Qt::AlignCenter | Qt::AlignTop, m_sAlias); 
painter->drawText(QRectF(0, 0, m_iSize, m_iSize), Qt::AlignCenter | Qt::AlignBottom, m_sCode); 

,它將使如果你對系統有沒有新的線路問題或者系統是否正確不管。

+0

感謝您的建議。只有一種類型,它需要Qt :: AlignHCenter,因爲Qt :: AlignCenter既可以作爲垂直標記也可以作爲水平標記,並且每個應用只能有一種。無論如何,令我驚訝的是,這段代碼對我來說產生了完全相同的問題,線條是一個像素錯位!我也嘗試了不同的字體,你說得對,因爲字體是特定的,因爲有些字體確實會產生這個問題,有些字體卻不會。我真的很困惑,但至少我現在知道如何處理這個問題。 – Resurrection

+0

最後,我去了嵌入式小部件,因爲我還需要文本編輯功能,QGraphicsText類並沒有真正爲我剪切(即沒有文字編輯信號),但這是重要的一課。 – Resurrection