相信Telegram项目大家或多或少都会听讲过,就算不知道的也应该了解下。我们现在不是要讨论这个软件如何,而是想讨论下这个开源软件里使用到的技术。本人想研究下Telegram,但无奈在windows下还是linux都无法编译成功这个项目,看源代码也是无从下手。因此想发此贴,看看大家对Telegram中的一些功能的实现有什么想法。。。
废话就不说了,这里对下面的一个功能的实现提出疑问——那就是聊天框的实现:
通过查看它的源码,整个聊天框是一个自定义widget,那么聊天框外面就应该是一个scrollarea了(这里只是一种猜测,源码只看了一点点,不是一边调试一边看,而已还没有注释,很难看懂。),那么这里我猜测聊天框里的消息框也是通过重新实现paintEvent来实现的,那么消息框要怎么实现呢?当然,这样的外观是很容易实现的,但问题是消息框的功能——请看下面:
可以看到,消息框里面的文字是可以选择的(其实表情也可以选择),那么
这种效果如果来实现呢?如果文字是利用drawText绘制出来的,那么在没有其他类的辅助下,文字是不可以选择的(其实原生drawText绘制出来的文字就像图片一样,那么图片当然不可以选择一部分)。
我的思考是会不会在QT本身就有这种绘制出来的文字也可以选择的原生api的实现,或者是Telegram的这个功能是通过其他方式自己实现的。那么到底是怎么实现文字与表情可以选择的呢?
注意到Telegram也不支持gif动画,这里还要提一个问题,在聊天面板是一个自定义的widget的情况下,如果添加对git动画的支持呢?