2015-09-04 963 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