QLabel自动换行的实现
来源:互联网 发布:女性生殖健康 知乎 编辑:程序博客网 时间:2024/04/30 10:52
刚开始百度了下想找现成的,没想到搜索的结果大部分都是这篇博文
1. 让QLabel自适应text的大小,直接用下面的代码:
LabelName->adjustSize();
2. 让QLabel能够自动判断并换行显示:
LabelName->setGeometry(QRect(328, 240, 329, 27*4)); //四倍行距
LabelName->setWordWrap(true);
LabelName->setAlignment(Qt::AlignTop);
这种方法如果全是ASCII字符并超过一行,则不会换行!
╮(╯▽╰)╭只能自己动手了
# 下面的代码实现了聊天气泡大小自适应于内容,解决了中文与ASCII字符大小不同以及ASCII字符过长# 不自动换行的问题height = 0width = 0height = 56checkLengthOver = 0chineseExistFlag = 0textSlice = sendText.split("\n")sendTextList = list()for s in textSlice: tmpText = "" tmpNum = 0 tmpWidth = 0 tmpNumList = list() tmpNumList.append(0) status = 0 if not s: height += 16 for i in s: if ord(i) in range(257): tmpWidth += 600 / 73 tmpNum += 1 if not status: status = 1 height += 16 else: tmpWidth += 600 / 44 tmpNum += 1 if not status: status = 1 height += 16.3 chineseExistFlag = 1 if tmpWidth > 600 - 600 / 44: tmpNumList.append(tmpNum) checkLengthOver = 1 tmpWidth = 0 if chineseExistFlag: chineseExistFlag = 0 height += 16.3 else: height += 16 if tmpWidth > width: width = tmpWidth if checkLengthOver == 1: width = 600 for j in range(len(tmpNumList)-1): tmpText = tmpText + s[tmpNumList[j]:tmpNumList[j+1]] + "\n" tmpText = tmpText + s[tmpNumList[-1]:] sendTextList.append(tmpText)sendText = "\n".join(sendTextList) # sendText = "<p style=\"line-height:%d\">%s</p>"%(90, sendText) if width == 0: width = 70 else: width += 80 itemHeight = height + 100 self.item.lbSendText.setMinimumSize(QtCore.QSize(width, height)) self.item.lbSendText.setMaximumSize(QtCore.QSize(width, height)) self.item.lbSendText.setWordWrap(True) self.item.lbSendText.setText(sendText) self.item.lbSendText.adjustSize() self.item.lbSendText.setScaledContents(True)
代码不太全,有些参数定义没去找了,但细心推导还是能推出来的。
具体代码就不细说了,大体思路说下:
这里使用的是文泉驿等宽11号字体
,ASCII字符是等宽的,中文之间是等宽的,但他们之间不等宽所以要分开计算。
这里设定的换行宽度是600px
首先将要发送的文字按照换行符”\n”分片,其次每一个分片都要根据字符宽度累加判断是否换行,所以依次判断每一个分片的长度。最后通过统计换行的次数判断高度。
实现效果图
苦思很久,也没想出更好的办法了,若有高人路过,还望指点指点,感激不尽!另外,在此之后可能会尝试推倒重来,用qml写。老铁,扎心没:)
0 0
- QLabel自动换行的实现
- QLabel自动换行是可以解决的
- QLabel自动换行是可以解决的 .
- QLabel自动换行是可以解决的
- 让QLabel自动换行
- Qt 让QLabel自适应text的大小,并且自动换行
- Qt 让QLabel自适应text的大小,并且自动换行
- QT控件中布局QLabel让其自适应大小自动换行遇到的问题
- JXL自动换行的实现
- css 不换行 自动换行 强制换行的实现方法
- Qt QLabel文字自动换行 Qwidget设置item不可拖动
- DIV文字自动换行的实现
- CSS实现自动换行的小技巧
- DIV文字自动换行的实现
- iPhone中TableViewCell自动换行的实现
- UILabel自动换行的两种实现
- Autolayout下UILabel的自动换行实现
- android 实现自动换行的流布局
- android和web扫描枪开发
- 【Unity3d游戏开发】浅谈Unity中的GC以及优化
- Android下拉刷新上拉加载控件(适用于所有View)
- C++ 递增运算符:前置++和后置++的区别
- 公司
- QLabel自动换行的实现
- Notification使用指导与规范(原理篇)
- 结构体中四字节对齐的详解
- linux线程池示例
- 关于Struct2中<s:textfield>的回显问题
- Android如何制作自己的依赖库上传至github供别人下载使用
- 跨域访问解决方案
- matlab循环矩阵
- POJ 2236 Wireless Network