• qt 写字


    Coordinate System

    坐标系统

    The coordinate system is controlled by the QPainter class. Together with the QPaintDevice and QPaintEngine classes, QPainter form the basis of Qt's painting system, Arthur. QPainter is used to perform drawing operations, QPaintDevice is an abstraction of a two-dimensional space that can be painted on using a QPainter, and QPaintEngine provides the interface that the painter uses to draw onto different types of devices.

    The QPaintDevice class is the base class of objects that can be painted: Its drawing capabilities are inherited by the QWidget, QImage, QPixmap, QPicture, and QOpenGLPaintDevice classes. The default coordinate system of a paint device has its origin at the top-left corner. The x values increase to the right and the y values increase downwards. The default unit is one pixel on pixel-based devices and one point (1/72 of an inch) on printers.


    默认是左上角为0, 0 点,向下向右增加。 显示器这种是以pixel为单位,打印机是point
    image


    坐标都是忽略 笔的宽度



    void QPainter::drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = nullptr)

    写字到指定矩形内

    查看文档有例子



    QRectF QPainter::boundingRect(const QRectF &rectangle, int flags, const QString &text)

    计算文字占用的矩形大小



    下面代码,发现3种计算出来结果都一样

    QPainter painter(this);
    QFont font = painter.font();
    font.setPixelSize(48);
    painter.setFont(font);

    const QRect rectangle = QRect(0, 0, 180, 50);
    QRect boundingRect;
    painter.drawText(rectangle, 0, tr("Hello中文"), &boundingRect);
    qDebug()<<boundingRect;

    QFontMetrics fm(font);
    int pixelsWide = fm.horizontalAdvance("Hello中文");
    int pixelsHigh = fm.height();
    qDebug()<<pixelsWide<<pixelsHigh;

    qDebug()<<painter.boundingRect(boundingRect,Qt::AlignLeft, "Hello中文" );

    QPen pen = painter.pen();
    pen.setStyle(Qt::DotLine);
    painter.setPen(pen);
    painter.drawRect(boundingRect.adjusted(0, 0, -pen.width(), -pen.width()));

    pen.setStyle(Qt::DashLine);
    painter.setPen(pen);
    painter.drawRect(rectangle.adjusted(0, 0, -pen.width(), -pen.width()));

  • 相关阅读:
    sqhhb
    12333
    12

    今日份
    12
    彻底理解 Cookie、Session、Token
    https原理
    12312
    uiower
  • 原文地址:https://www.cnblogs.com/cute/p/16673071.html
Copyright © 2020-2023  润新知