如何通过基线定位 QStaticText?
How to position a QStaticText by its baseline?
如何实现 QStaticText
对象的基线定位?
对于普通文本,很简单:在QPainter::drawText(position, text)
中,position.y
坐标指的是基线。
看看什么QStaticText::size()
returns.
它可能类似于 QTextMetrics::boundingRect()
。 QFontMetrics 的基线位于边界矩形高度的 3/4 处,并为基线下方的字母部分保留 space,例如 Q、g、p、q 或 y。
可以想象它与 QStaticText::size()
相似。不过现在还不能测试。
事实证明,drawStaticText
将文本定位在基线,但通过字体的上升偏移了 y 坐标。
这是文档中top of the font
的意思。
最小演示:
#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QStaticText>
class Window: public QWidget
{
public:
void paintEvent(QPaintEvent*) override
{
QPainter painter(this);
const int y = 20;
painter.fillRect(0, y, 200, 1, Qt::black);
// These all share the same baseline
painter.drawStaticText(10, y, QStaticText("Üg."));
painter.drawStaticText(26, y, QStaticText("."));
painter.drawText(29, y + QFontMetrics(QApplication::font()).ascent(), ".");
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Window win;
win.show();
return app.exec();
}
输出:
如何实现 QStaticText
对象的基线定位?
对于普通文本,很简单:在QPainter::drawText(position, text)
中,position.y
坐标指的是基线。
看看什么QStaticText::size()
returns.
它可能类似于 QTextMetrics::boundingRect()
。 QFontMetrics 的基线位于边界矩形高度的 3/4 处,并为基线下方的字母部分保留 space,例如 Q、g、p、q 或 y。
可以想象它与 QStaticText::size()
相似。不过现在还不能测试。
事实证明,drawStaticText
将文本定位在基线,但通过字体的上升偏移了 y 坐标。
这是文档中top of the font
的意思。
最小演示:
#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QStaticText>
class Window: public QWidget
{
public:
void paintEvent(QPaintEvent*) override
{
QPainter painter(this);
const int y = 20;
painter.fillRect(0, y, 200, 1, Qt::black);
// These all share the same baseline
painter.drawStaticText(10, y, QStaticText("Üg."));
painter.drawStaticText(26, y, QStaticText("."));
painter.drawText(29, y + QFontMetrics(QApplication::font()).ascent(), ".");
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Window win;
win.show();
return app.exec();
}
输出: