gpt4 book ai didi

c++ - QFontMetrics 返回宽度非常错误的边界矩形

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:28 26 4
gpt4 key购买 nike

我目前正在渲染一个简单的QGraphicsItem。为了提高渲染性能,在构造函数中计算了它的几个内部组件的边界框。

但是我在文本宽度方面遇到了真正的问题,如下图所示:

Bad Rectangles

我用绿线渲染了计算出的 BB,这样您就可以很容易地看到发生了什么。现在我知道 QFontMetrics::boundingRect(..) 并不十分精确,因为它没有考虑斜体或字体抗锯齿 - 但那永远不会超过几个像素。

下面是我如何计算最上面的“时钟”边界矩形:

QFont font = Sy_application::font();
font.setPointSize( font.pointSize() * 2 );
QFontMetrics fontMet( font );
BB_ = fontMet.boundingRect( getNode()->getName() );
BB_.moveTop( 0.0 );

下面是我如何使用它来呈现 QGraphicsItem::paint(..) 中的文本:

QFont font = Sy_application::font();
font.setPointSize( font.pointSize() * 2 );
painter->setFont( font );
painter->setPen( Qt::black );
painter->drawText( BB_.bottomLeft(), getNode()->getName() );

我检查了一些调试输出,BB_ 在创建和使用之间没有变化。事实上,创建它的 fontMet.boundingRect( getNode()->getName() ); 返回一个 45 个单位宽的边界矩形 - 时钟图标是 46。所以它肯定是错误的。

谁能看出我是如何使用 QFontMetrics::boundingRect(..) 错误的?

最佳答案

QFontMetrics 构造函数中为 QPaintDevice arg 添加 QGraphicsView 更正了这个问题。据推测,在度量计算中未考虑的 View 中发生了一些转换。

关于c++ - QFontMetrics 返回宽度非常错误的边界矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12019881/

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