Qt的drawText不换行解决

改为调用下面的函数,且将flags设置为Qt::TextWordWrap即可,关于第二个参数flags的取值及有何作用,请参见qt的帮助手册。

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

注意:要绘制的文本即上述函数的第3个参数在要换行的地方加\n才能换行。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Qt中,我们可以使用drawText()函数绘制文本,但是它默认不会自动换行文本。不过我们可以通过一些方法来实现自动换行,即使不考虑整词。 一种方法是使用QFontMetrics类来获得文本的宽度。首先,我们需要使用QFontMetrics测量整个文本的宽度。然后,根据给定的宽度,确定一行文本可以容纳的字符数。接下来,通过循环将文本切分为多行,并在每一行调用drawText()函数绘制文本。 另一种方法是使用QTextDocument类。我们可以将文本分配给一个QTextDocument对象,并使用QPainterdrawLayout()函数来绘制文本。通过设置QTextOption对象的WrapMode属性为QTextOption::WrapAtWordBoundaryOrAnywhere,我们可以实现不考虑整词时的自动换行。 下面是一个示例代码,演示了如何在不考虑整词的情况下实现自动换行: ```cpp void MyWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); QRect rect(10, 10, 200, 200); // 设置绘制文本的矩形区域 QString text = "这是一段需要自动换行的文本,长度较长"; QFont font("Arial", 12); painter.setFont(font); QTextOption option; option.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); QTextDocument textDocument; textDocument.setDefaultFont(font); textDocument.setDefaultTextOption(option); textDocument.setTextWidth(rect.width()); // 设置文本宽度与矩形宽度一致 textDocument.setPlainText(text); painter.translate(rect.x(), rect.y()); // 设置绘制起点 textDocument.drawContents(&painter); // 绘制文本 } ``` 通过使用上述方法,我们可以实现在Qt中绘制自动换行的文本,即使不考虑整词。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值