QPainter类的drawText方法有如下重载:
void
drawText(const QPointF &position, const QString &text)
void
drawText(const QPoint &position, const QString &text)
void
drawText(int x, int y, const QString &text)
void
drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = nullptr)
void
drawText(const QRect &rectangle, int flags, const QString &text, QRect *boundingRect = nullptr)
void
drawText(int x, int y, int width, int height, int flags, const QString &text, QRect *boundingRect = nullptr)
void
drawText(const QRectF &rectangle, const QString &text, const QTextOption &option = QTextOption())
可以分成两类,一类是提供点坐标绘制文本,一类是提供方框绘制文本。区别在于提供点坐标进行绘制的时候,点是在文本的左下角。而提供矩形的时候,矩形的点是在文本的左上角,同时也是矩形的左上角。
代码示例:
void MainWindow::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
auto font = painter.font();
font.setPixelSize(20);
painter.setFont(font);
painter.translate(100, 100);
painter.drawLine(-100, 0, 500, 0);
painter.drawLine(0, -500, 0, 100);
painter.setPen(Qt::blue);
QString text1 = "Hello";
painter.drawText(0, 0, text1);
QRect rect(0, 0, 100, 100);
QString text2 = "World";
painter.drawText(rect, text2);
painter.setPen(Qt::red);
painter.drawRect(rect);
return QMainWindow::paintEvent(event);
}
可以看到两个函数提供的点坐标锚定的是文本的不同位置,使用时要多多注意。