此代码原理是获取字符串像素长度后, 超出设置的限制宽度后进行截取操作加换行符从而达到自动换行效果
Qt的Lable自带的换行属性不支持纯英文,纯数字的字符串换行
// font 设置的字体属性
// text 文本
// nLabelSize 到达此宽度换行
QString ProcessingText(const QFontMetrics& font, const QString& text, int nLabelSize)
{
int nTextSize = font.width(text);
if (nTextSize > nLabelSize)
{
int nPos = 0;
long nOffset = 0;
for (int i = 0; i < text.size(); i++)
{
nOffset += font.width(text.at(i));
if (nOffset > nLabelSize)
{
nPos = i;
break;
}
}
QString qstrLeftData = text.left(nPos);
QString qstrMidData = text.mid(nPos);
return qstrLeftData + "\n" + ProcessingText(font, qstrMidData, nLabelSize);
}
return text;
}
基本用法:
QLabel* pLable = new QLabel;
int nLabelSize = 210;
pLable ->setFixedWidth(nLabelSize);
pLable ->setText("输入文本内容");
QFontMetrics font(pLable->font());
int nTextSize = font.width(pLable->text());
if (nTextSize > nLabelSize)
{
QString qstrData = ProcessingText(font, pLable->text(), nLabelSize);
pLable ->setText(qstrData);
}
else
{
pLable ->setText(pLable->text());
}