我想做一个相当简单的绘画,我在圆圈的中心写上两个文字。我的代码:
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);
但这只是愚蠢的,即使它按预期正常工作(我将顶部文本向右移动一个像素)。
我在这里缺少什么?如果需要,我可以提供截图。
截图:
错误(第一行代码),行相互移动一个像素
正确(第二个两行代码),行正确对齐
答案 0 :(得分: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);
无论您是在具有新线路问题的系统还是没有系统的系统上,它都将正确呈现。