在你的代码中,当文本宽度超过最大宽度时,已经启用了自动换行功能,并调用了ui->lbl_msg->adjustSize()
来调整QLabel的大小。但是,在设置完自动换行后,需要等待Qt进行布局和绘制操作才能看到效果。
为了确保QLabel及时调整大小以适应文本内容,请在将sendtext()
函数中对QLabel进行文本设置后,添加如下代码:
// 调整父部件的大小
this->adjustSize();
这样可以使QWidget父部件(即sendItem)也随着QLabel的尺寸变化而调整大小。然后再执行resize()
函数将sendItem窗口的高度设置为正确的值。
修改后的代码片段如下:
void sendItem::sendtext(QString text)
{
ui->lbl_msg->setText(text);
// 获取QLabel当前使用的字体
QFont font = ui->lbl_msg->font();
// 创建一个QFontMetrics对象,用于测量文本宽度
QFontMetrics metrics(font);
// 设置最大宽度
int maxWidth = 200; // 设置最大宽度为200像素
// 测量文本的宽度
int textWidth = metrics.width(text);
if (textWidth > maxWidth) {
// 当文本宽度超过最大宽度时,启用自动换行
ui->lbl_msg->setWordWrap(true);
ui->lbl_msg->adjustSize();
} else {
// 当文本宽度未超过最大宽度时,禁用自动换行
ui->lbl_msg->setWordWrap(false);
ui->lbl_msg->adjustSize();
}
height = ui->lbl_msg->height();
resize(801, height + 50);
this->adjustSize(); // 调整父部件的大小
}
这样,当QLabel的尺寸发生变化后,sendItem窗口会随之调整大小。希望能够解决你遇到的问题。
内容由零声教学AI助手提供,问题来源于学员提问