QT笔记——QLabel设置自动换行

在网上看了很多的例子,然后很多都去试发现很多的问题,要不就是不成功,要不就是对自己没用,然后就慢慢解决

1.QLabel 自带的 换行功能

//设置自动换行
ui.label->setWordWrap(true);

这种方法 ,我试了一下,好像不支持英文 和 数字 效果如下:它并没有进行换行,不符合我们需要的
QT笔记——QLabel设置自动换行_第1张图片

2.自定义写法 来让QLabel 进行 换行功能

#pragma once

#include 
#include "ui_QLabelLineFeedTest.h"
#include 
#include 

class QLabelLineFeedTest : public QWidget
{
    Q_OBJECT

public:
    QLabelLineFeedTest(QWidget *parent = Q_NULLPTR);

    QString setLineFeed(QString str, int width);  //设置换行  字符个数进行自定义换行
    QString setLineFeed2(QString str,int width);  //根据QFontMetrics 获取字符宽度来自定义换行


protected:
    void resizeEvent(QResizeEvent* event)Q_DECL_OVERRIDE;

private:
    Ui::QLabelLineFeedTestClass ui;

};

#include "QLabelLineFeedTest.h"
#include 
#include 


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;
}




void QLabelLineFeedTest::resizeEvent(QResizeEvent* event) 
{
	Q_UNUSED(event);
	ui.label->setText((setLineFeed2(QStringLiteral("444444444444dsa你好dasdasdasda44444444dsada4444444444446中文545645dsadasdaws316574897984316549879798715634"), this->width())));

}

我们发现 代码写了,但是好像只能一直往后,而且并没有换行(向右拉,可以向第一行添加字符,但是向左拉,并没有换行)
QT笔记——QLabel设置自动换行_第2张图片
解决问题:如果我不设置 最小宽度的话 ,就不能进行换行
QT笔记——QLabel设置自动换行_第3张图片

QT笔记——QLabel设置自动换行_第4张图片
上面的自定义方法是其他人的,略左一些小变动:
https://blog.csdn.net/lvdepeng123/article/details/84841689?spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-blog-2defaultOPENSEARCHRate-5-84841689-bbs-391113277.pc_relevant_bbs_down_v2_opensearchbbsnew&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-blog-2defaultOPENSEARCHRate-5-84841689-bbs-391113277.pc_relevant_bbs_down_v2_opensearchbbsnew

你可能感兴趣的:(QT,qt,ui,开发语言)