可以使用QFontMetrics类来计算字符串的宽度和高度,然后根据需要将字符串分成两行,最后使用QPainter在指定的QRect中绘制出字符串。
以下是一个示例代码:
void MyWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
QString text = "This is a long text that needs to be split into two lines";
QFont font("Arial", 12);
painter.setFont(font);
QRect rect(50, 50, 200, 100);
painter.drawRect(rect);
QFontMetrics metrics(font);
int textWidth = metrics.width(text);
int lineHeight = metrics.lineSpacing();
if (textWidth > rect.width()) {
QStringList words = text.split(" ");
QString line1 = words[0];
QString line2;
for (int i = 1; i < words.size(); i++) {
QString temp = line1 + " " + words[i];
if (metrics.width(temp) > rect.width()) {
line2 = words.mid(i).join(" ");
break;
} else {
line1 = temp;
}
}
painter.drawText(rect.left(), rect.top() + lineHeight, line1);
painter.drawText(rect.left(), rect.top() + lineHeight * 2, line2);
} else {
painter.drawText(rect, Qt::AlignCenter, text);
}
}
以上示例中,首先定义了一个长字符串和一个字体。然后创建一个QRect对象来指定绘制的区域,并使用QPainter绘制一个矩形。
接着使用QFontMetrics类计算字符串的宽度和行高。如果字符串的宽度超过了指定的矩形宽度,我们将字符串分成两行。我们使用QStringList和join()函数来拆分和重新组合字符串。
最后,我们使用QPainter在指定的矩形中绘制字符串。如果字符串只有一行,我们使用drawText()函数并将对齐方式设置为居中。如果字符串有两行,我们使用drawText()函数分别在两行中绘制字符串。