在网上看了很多的例子,然后很多都去试发现很多的问题,要不就是不成功,要不就是对自己没用,然后就慢慢解决
1.QLabel 自带的 换行功能
//设置自动换行
ui.label->setWordWrap(true);
这种方法 ,我试了一下,好像不支持英文 和 数字 效果如下:它并没有进行换行,不符合我们需要的
2.自定义写法 来让QLabel 进行 换行功能
#pragmaonce#include<QtWidgets/QWidget>#include"ui_QLabelLineFeedTest.h"#include<QResizeEvent>#include<QFontMetrics>classQLabelLineFeedTest:publicQWidget{
Q_OBJECT
public:QLabelLineFeedTest(QWidget *parent = Q_NULLPTR);
QString setLineFeed(QString str,int width);//设置换行 字符个数进行自定义换行
QString setLineFeed2(QString str,int width);//根据QFontMetrics 获取字符宽度来自定义换行protected:voidresizeEvent(QResizeEvent* event)Q_DECL_OVERRIDE;private:
Ui::QLabelLineFeedTestClass ui;};
#include"QLabelLineFeedTest.h"#include<QFont>#include<QDebug>QLabelLineFeedTest::QLabelLineFeedTest(QWidget *parent):QWidget(parent){
ui.setupUi(this);
ui.label->adjustSize();//设置自动换行
ui.label->setWordWrap(true);//超长文本//ui.label->setText(QStringLiteral("中文你好中文你好中文你好中文你好中文你好中文你好中文你好中文你好中文你好中文你好中文你好中文你好中文你好中文你好中文你好中文你好中文你好"));//ui.label->setText(QStringLiteral("1as4d65a4d65as1d32as4r89w4tg6d1gsd46h4tf6dj1gf4864f61as56f4e89s4g65se1h65fds7yh48r1de6h5r74968"));}
QString QLabelLineFeedTest::setLineFeed(QString text,int width){if(text.size()<=0)return"";if(width > text.size()|| width <=0)return text;
QString strText = text;int AntoIndex =1;if(!strText.isEmpty()){for(int i =1; i < strText.size()+1; i++)//width个字符换一行{if(i == width * AntoIndex + AntoIndex -1){
strText.insert(i,"\n");
AntoIndex++;}}}return strText;}
QString QLabelLineFeedTest::setLineFeed2(QString text,int pxWidth){
QString strText = text;int AntoIndex =1;
QFont font = ui.label->font();
QFontMetrics fm(font);if(!strText.isEmpty()){for(int i =1; i < strText.size()+1; i++)///{if(fm.width(strText.left(i))> pxWidth * AntoIndex)//当strText宽度大于pxWidth px的时候添加换行符{
AntoIndex++;
strText.insert(i -1,"\n");}}}return strText;}voidQLabelLineFeedTest::resizeEvent(QResizeEvent* event){Q_UNUSED(event);
ui.label->setText((setLineFeed2(QStringLiteral("444444444444dsa你好dasdasdasda44444444dsada4444444444446中文545645dsadasdaws316574897984316549879798715634"),this->width())));}
我们发现 代码写了,但是好像只能一直往后,而且并没有换行(向右拉,可以向第一行添加字符,但是向左拉,并没有换行)
解决问题:如果我不设置 最小宽度的话 ,就不能进行换行
版权归原作者 lion_cxq 所有, 如有侵权,请联系我们删除。