根据PC端telegram源码提取出来的Qt文本显示代码

最近在做一个聊天软件,是用Qt开发,消息显示是一个比较重要的部分,经过几次尝试发现Qt的默认控件都没有现成的能够实现复制、选中效果、链接、显示表情和图片等的控件,后面发现telegram的PC端也是用Qt写的,就下载了它的源码研究了一下它们的消息显示部分,并单独把这部分提取出来了,在这里分享一下。

Telegram的方法大概是这样的:

1.flatlabel是显示消息的控件,继承自他们自己封装的twidget、clickhander(为实现url点击时用);

2.初始化的style::flatlabel     这里面包含了很多显示文字的默认样式,字体大小、颜色等,我在提取的时候有些简化掉了;

3.Flatlabel有个Text类,这个是最重要的,文字解析和绘制都在这个类里面实现,通过settext方法会把文本传给Text去管理;

4.Text类同TextParser类对文本进行解析,把文本解析成各种block(比较重要的两个函数parseCurrentChar();parseEmojiFromCurrent(););

5.解析完成绘制的时候通过TextPainter类实现,通过draw和drawline函数,把文本绘制在QWidget上,绘制的很多样式颜色啥的都可以在style::flatlabel里设置,他们还封装了style::font和style::color来管理这些样式;

提取的时候代码被我改的有点乱,有兴趣的可以自己整理一下

展示一下我提取出来后实现的效果:

 

这是在项目中实现的

 根据PC端telegram源码提取出来的Qt文本显示代码_第1张图片

 

编译的时候要注意一下:

1.我安装的是Qt5.7.1版本, msvc32编译器,安装vs2015,win7;

2.编译前,先把QtCore、QtWiget、QtGui这三个头文件路径下面的private文件夹

(Qt\Qt5.7.1_vs32\5.7\msvc2015\include\QtWidgets\5.7.1\QtWidgets\private、Qt\Qt5.7.1_vs32\5.7\msvc2015\include\QtWidgets\5.7.1\QtWidgets\private、Qt\Qt5.7.1_vs32\5.7\msvc2015\include\QtWidgets\5.7.1\QtWidgets\private)复制到QtCore、QtWiget、QtGui这三个路径下面,不然会编译出错

 根据PC端telegram源码提取出来的Qt文本显示代码_第2张图片

资源地址

你可能感兴趣的:(Qt)