最近在做一个聊天软件,是用Qt开发,消息显示是一个比较重要的部分,经过几次尝试发现Qt的默认控件都没有现成的能够实现复制、选中效果、链接、显示表情和图片等的控件,后面发现telegram的PC端也是用Qt写的,就下载了它的源码研究了一下它们的消息显示部分,并单独把这部分提取出来了,在这里分享一下。
Telegram的方法大概是这样的:
1.flatlabel是显示消息的控件,继承自他们自己封装的twidget、clickhander(为实现url点击时用);
2.初始化的style::flatlabel 这里面包含了很多显示文字的默认样式,字体大小、颜色等,我在提取的时候有些简化掉了;
3.Flatlabel有个Text类,这个是最重要的,文字解析和绘制都在这个类里面实现,通过settext方法会把文本传给Text去管理;