QPainter绘制文字换行¶
QPainter 不会处理所有转义字符
在使用QPainter的drawText方法绘制文本时,默认情况下不会识别换行符 \n
或 \r\n
。为了在指定位置换行,可以逐行打印文本,或者通过指定文本宽度实现自动换行。以下是两种方法的实现:
1 指定换行符¶
通过手动拆分文本并逐行绘制,实现换行效果:
painter->save();
QString text;
text = QString(
u8"侧卧\n"
"%1 P2TB -z与+y 夹角 (80~90)\n"
"%2,%3 P2B xy (-50~50)(-600,-550)\n"
"%4,%5 P2TB xy (-50~50)(-25~25)\n"
"%6 P2B -z投影xz与+-x 夹角 (25~65)\n"
"%7 P2B -z与+y 夹角 (80~90)\n"
"%8 TB2B +y投影xy与+y 夹角"
)
.arg(QString::number(step.data.at(0), 'f', 1))
.arg(QString::number(step.data.at(1), 'f', 1))
.arg(QString::number(step.data.at(2), 'f', 1))
.arg(QString::number(step.data.at(3), 'f', 1))
.arg(QString::number(step.data.at(4), 'f', 1))
.arg(QString::number(step.data.at(5), 'f', 1))
.arg(QString::number(step.data.at(6), 'f', 1))
.arg(QString::number(step.data.at(7), 'f', 1));
int textX = m_LImgSize + 100;
int textY = 650;
QPen pen;
pen.setWidth(5);
pen.setStyle(Qt::PenStyle::SolidLine);
pen.setColor(Qt::white);
painter->setPen(pen);
QFont font;
font.setBold(true);
font.setPointSize(20);
painter->setFont(font);
QStringList lines = text.split("\n");
for (const QString& line : lines) {
painter->drawText(textX, textY, line);
textY += 40;
}
painter->restore();
2 自动换行¶
通过指定文本绘制的区域宽度,使得QPainter自动换行: