如何根据基线定位QStaticText?

时间:2015-11-19 13:28:17

标签: qt qtwidgets

如何实现QStaticText对象的基线定位?

对于常规文字,这很简单:在QPainter::drawText(position, text)中,position.y坐标指的是基线。

2 个答案:

答案 0 :(得分:2)

事实证明,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();
}

输出:

enter image description here

答案 1 :(得分:1)

查看QStaticText::size()返回的内容。

可能与QTextMetrics::boundingRect()类似。 QFontMetrics的基线是边界矩形高度的3/4,并为基线下方的字母部分保留空间,如Q,g,p,q或y。

可以想象它与QStaticText::size()类似。但是现在无法测试它。