gpt4 book ai didi

c++ - QPainter与Qt::AlignCenter不能正确居中文本

转载 作者:行者123 更新时间:2023-12-02 10:08:51 25 4
gpt4 key购买 nike

我想做一个相当简单的绘图,在圆圈的中心,我在彼此上方写了两段文字。我的代码:

    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);

但这只是愚蠢的,即使它确实可以按预期工作(我将顶部文本向右移动一个像素)。

我在这里想念什么?如果需要,我可以提供屏幕截图。

屏幕截图:

错误(第一个行代码),行彼此之间移动了一个像素



正确(第二两行代码),行正确对齐

最佳答案

我无法重现此问题,但是我在不同的系统上使用不同的默认字体。可能是您使用的字体为换行符指定了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);

无论您使用的是新线路问题的系统,还是使用新线路问题的系统,它都将正确呈现。

关于c++ - QPainter与Qt::AlignCenter不能正确居中文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32404596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com