- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这发生在 Linux 上。
执行此代码时出现问题(我在小部件的绘制事件中绘制):
painter.drawText(0, 0, 1000, 1000, 0, QString("0"), &charBoundingBox);
qDebug() << "bounding box height" << charBoundingBox.height();
qDebug() << "lineSpacing" << painter.fontMetrics().lineSpacing();
qDebug() << "leading" << painter.fontMetrics().leading();
qDebug() << "height" << painter.fontMetrics().height();
qDebug() << painter.font();
输出:
bounding box height 11
lineSpacing 7
leading -1
height 8
QFont( "Digital-7,10,-1,5,50,0,0,0,0,0" )
请注意字符边界框的高度为 11
,而行间距为 7
。这部分是因为前导是负数,但即使没有它,字体高度仍然较小。
Qt如何计算它返回的字符边界框?它的高度显然不是从 fontMetrics::height
和 fontMetrics::leading
派生的。
最佳答案
无法保证画家返回的边界框的高度与字体高度相同。此外,行间距是字体高度和行距的总和。如果字体的行距为负数,则行距将小于高度。
此外,为了确保您使用的是正确的指标,您应该使用 painter.fontMetrics() 而不是构建 QFontMetrics(font)。
在任何情况下,为了确定您遇到的是上述哪种情况,您应该分别打印出字体行距和字体高度(使用 painter.fontMetrics())。
关于c++ - 为什么 QFontMetrics::lineSpacing() 小于字符边界框的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13432746/
有人向我解释这个测试程序的结果吗? #include #include #include int main(int argc, char *argv[]) { QApplication
我在使用 QFontMetrics 的“boundingRect”函数时遇到问题,它没有返回正确的结果。 mfntArial = QFont("Arial", 12, QFont::Bold)
我目前正在渲染一个简单的QGraphicsItem。为了提高渲染性能,在构造函数中计算了它的几个内部组件的边界框。 但是我在文本宽度方面遇到了真正的问题,如下图所示: 我用绿线渲染了计算出的 BB,这
我的 QTableWidget 中有一个自定义委托(delegate),用于在用户搜索某些内容时突出显示匹配项。不幸的是,矩形位置通常不适合某些字符或短语,或者取决于匹配的数量或前导字符串的大小。我找
我想实现一个 QGraphicsElement,它在圆角矩形内“按原样”绘制文本。 为了实现 QGraphicsElement 我需要实现 boundedRect 函数,所以我需要原样的多行消息的 b
Windows 7 SP1 MSVS 2010 Qt 4.8.4 我想确定 QLineEdit 小部件的最大大小,知道必须放入其中的最大字符数。 因此,我想使用: int QFontMetrics::
为什么 next 函数返回 0 ?(我的环境是:Windows Vista、vc++9、Qt4.5) int func() { QPushButton button("Blah blah");
这发生在 Linux 上。 执行此代码时出现问题(我在小部件的绘制事件中绘制): painter.drawText(0, 0, 1000, 1000, 0, QString("0"), &charBo
我正在创建一个自定义标签,希望它具有 13 像素高的文本,并将标签的最大高度设置为 14。 textFont.setFamily("Frutiger LT Com 55 Roman"); textFo
我是一名优秀的程序员,十分优秀!