Qt5做出一个根据内容自动换行的label
百度上一堆复制粘贴的
- 让QLabel自适应text的大小,直接用下面的代码:
LabelName->adjustSize();- 让QLabel能够自动判断并换行显示:
LabelName->setGeometry(QRect(328, 240, 329, 27*4)); //四倍行距
LabelName->setWordWrap(true);
LabelName->setAlignment(Qt::AlignTop);
但是在做的时候发现这样是有局限性的,如果输入一长串英文字符串的话是不会换行的。
同样,还有一些做法,比如
QLabel自动换行
做法复杂,而且难以理解。最后,自己捣鼓一天弄出来了。
我们在这里要用到的模块是PyQt中的Font和QFontMetrics类
QFontMetrics
QFontMetrics中有一个函数是horizontalAdvance
可以获取覆盖字符串所需要的矩阵的像素宽度,height
可以获得字符串所需要的矩阵的像素高度,然后根据这个像素宽度,再裁切下字符串就可以自动换行了。
QFont font("times", 24);
QFontMetrics fm(font);
int pixelsWide = fm.horizontalAdvance("What's the width of this text?");
int pixelsHigh = fm.height();