吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5760|回复: 29
收起左侧

[C&C++ 转载] Qt实现一个聊天对话框

  [复制链接]
沉默的菜鸟 发表于 2020-8-28 00:15
本帖最后由 沉默的菜鸟 于 2020-8-28 00:18 编辑

  本人喜欢研究IM系统,尤其是桌面端和服务器端。桌面端一般使用Qt或者PyQt等框架来进行界面的构建。IM系统中较为重要的一个部分就是对话框的界面的实现。对话框界面越美观越好用,用户体验就越好,所以绘制一个美观实用的对话界面就尤为重要了。
  前几次做IM客户端的界面时,只是简单的使用了Qt的QTextEdit,每次对话就append一段字符串就行,区别自己和另外一个人只是在字符串前面添加一个名称标识。这样的做法一方面简陋,不方便对人聊天时对话框的跳转和数据的存储,另一方面用户体验较差,界面不美观。
  所以本次使用QListWidget作为消息的显示方式,每一个QListWidgetItem作为一个消息,为每一个QListWidgetItem设置一个QWidget,方便消息的显示以及使界面更加美观。
  对于这个QWidget,绘制其内容有几种方式:
  • 简单地直接new一个QWidget然后通过new布局和new控件,简单粗暴的生成一个QWidget,其中文字的样式选择,图片的设置等都在此时动态地设置。(简单粗暴,但不好控制,调试难度大)
  • 建立两个QWidget地UI类(从左向右和从右向左的两种消息),直接可视化地对界面进行布局和设置控件等,然后每次设置item地QWidget时就new一个这个UI类的实例。(简单易懂,好操作,内存消耗较多)
  • 建立一个QWidget的子类(非UI类),通过paintEvent()函数动态进行绘制。(比较难掌握,调试难,内存消耗低)
这三种方法的我都试过,前两种方法都成功的做出了我想要的结果,但是第三种方法尝试失败了(还导致了我重新卸载和重装Qt好几次,Qt Creator真的难调试)。


我就展示下第二种方法的项目代码吧,
首先时项目结构:

2.png

对话界面:

3.png 4.png

大小(正常)

5.png

大小(全屏)

核心算法:

  • 获取输入字符串
  • 通过选定的font-family和font-size算出这个字符串排列成一行的长度
  • 通过给定的label长度算出label的height需要增大的倍数( + 1)
  • resize item

效果图:

test (1).gif

仍未解决的问题:

  • 每行消息hover时颜色会有变化
  • 内存占用高的问题

附件为代码。

欢迎大家提出建议和意见

ChatApp.zip

22.6 KB, 下载次数: 74, 下载积分: 吾爱币 -1 CB

代码

免费评分

参与人数 6吾爱币 +6 热心值 +6 收起 理由
sin45 + 1 + 1 谢谢@Thanks!
zrl7890123 + 1 + 1 谢谢@Thanks!
JIAN_ + 1 + 1 厉害了!功能还不错。
古月不傲 + 1 + 1 谢谢@Thanks!
红颜世家、 + 1 + 1 谢谢@Thanks!
Laotu + 1 + 1 加油

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

kun775 发表于 2020-8-28 10:40
rainisa 发表于 2020-8-28 10:07
python 有PyQT5可以可视化编辑,但是打包出来的软件体积太大了不知道怎么解决。
给同事做了个小工具,核 ...

做小工具还是用winform方便,微软亲儿子,写出来的软件很小,甚至都不用打包,编译成release就可以分发了,当然了,如果你会wpf的话,wpf更现代化,效果更好看
rainisa 发表于 2020-8-28 10:07
ciker_li 发表于 2020-8-28 09:23
感谢分享,python为什么不做一个像VC、VB那样可视化的GUI编辑器呢

python 有PyQT5可以可视化编辑,但是打包出来的软件体积太大了不知道怎么解决。
给同事做了个小工具,核心代码只有8行,打包出来的软件80MB
宁采成 发表于 2020-8-28 08:17
wendao_lx 发表于 2020-8-28 08:29
受教了,不错!!
eepp 发表于 2020-8-28 08:39
加油!争取做一个有趣好玩聊天工具!
 楼主| 沉默的菜鸟 发表于 2020-8-28 08:40
eepp 发表于 2020-8-28 08:39
加油!争取做一个有趣好玩聊天工具!

感谢鼓励
假想的竞争者 发表于 2020-8-28 08:46
非常不错,太牛了!!
slm801 发表于 2020-8-28 08:56
只能看看,学不来。感谢分享!
ciker_li 发表于 2020-8-28 09:23
感谢分享,python为什么不做一个像VC、VB那样可视化的GUI编辑器呢
hualong1009 发表于 2020-8-28 09:25
有意思,可以研究下
头像被屏蔽
tlf 发表于 2020-8-28 09:27
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 23:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表