本次设计是一个简易的局域网聊天,功能设计主要分为群聊和私聊两部分,每部分都支持基础聊天以及文件传输功能,私聊页面相较于主页面支持更多功能,例如表情发送、窗口抖动,语音聊天等。参考了《Qt及Qt Quick开发实战精解》中第5章群聊实例,在群聊的基础设计了私聊这部分内容以及其他一些功能。下面介绍下整体的设计以及实现。

个人blog本文地址 http://blog.peoplevip.cn/2019/eba88ba7.html
本文档将依据启动次序来写

  • 设计时这里用的是主机的ip地址,可使用多台主机运行程序进行测试,确保多台主机连接同一局域网,之前调试过程中发现可能会检测到本地多个局域网IP,所以程序启动之初需要手动选择检测列表中的某个IP。

文件的传输、私聊、语音采用的是TCP、UDP、UDP,其中UDP中主要用来保存进行不同操作的消息状态(新用户的加入、消息的发送,传输文件、拒绝接受文件、用户离开、进入私聊阶段),然后通过广播发送给其他的客户端从而保证各个客户端的即时性,各个客户端接受到不同的消息状态进行响应执行操作。程序执行时属于新用户加入阶段, 此时所有用户都处于同一界面,相当于群聊阶段,可发送消息进行群聊。TCP主要用来传输文件,当接受到由UPD发送的传输文件消息时,发送文件一方作为Server端,接受文件一方作为Client端,实现点到点之间的传输。

1.用户加入
对于新用户的加入我们会显示主机的用户名,每加入一个客户端,在其他客户端以及自己客户端中显示用户名、主机名(此列存在但被人工隐藏)、IP地址、并在消息记录框中显示xxx在线,此时某一方发送消息在其他客户端即可实时收到消息,实现群聊功能(图一)。当某个客户端关闭或退出程序时,此时在消息框记录框中显示于时间离开,当再有新用户加入时又再次显示xxx在线。(本机局域网的IP是172.16.22.48),另一客户端IP(172.16.22.53)



此处的关键是在主界面的构造函数中发送上线广播,关闭时发送离线广播
2. 界面介绍

  • 消息发送框上分别代表字体样式、字体大小、加粗、斜体、下划线、颜色、截图、选择文件;
  • 消息接受框上为语音聊天、视频通话(未实现)、文件传输、远程桌面。
  • 选择IP左侧为切换皮肤,效果如下图

  • 截图界面展示

    3.文件的传输
  • 群聊界面:
    • 在文件传输前,我们首先选择要发送到的IP地址,从右侧的显示主机信息中选择,若未选中,会提示用户未选中并重新选择,在选中接收文件的IP后(群聊可以选中自己IP进行测试),点击消息输入框上的传输文件按钮,此时进入Server文件发送界面。选择发送文件进行发送,此时另一选中的用户弹出Client文件接收界面,选择是否接收。
  • 私聊
    私聊界面文件发送直接点击,效果和主界面相同

4.私人聊天

  • 从右侧显示主机信息栏中双击,为了方便测试,此处可以和自己聊天。当双击用户时,此时弹出私人聊天界面,并显示与某某聊天中,获得它的IP地址。对方收到消息会在主页面显示“XXX正在给您发送私聊消息”
  • 发送窗口抖动
    建立窗口抖动标志,在发送消息里,接收端收到消息后窗口在上下左右不同幅度抖动
QPropertyAnimation *pAnimation = new QPropertyAnimation(this, "pos");
pAnimation->setDuration(500);
pAnimation->setLoopCount(2);
pAnimation->setKeyValueAt(0, QPoint(geometry().x() - 3, geometry().y() - 3));
pAnimation->setKeyValueAt(0.1, QPoint(geometry().x() + 6, geometry().y() + 6));
pAnimation->setKeyValueAt(0.2, QPoint(geometry().x() - 6, geometry().y() + 6));
pAnimation->setKeyValueAt(0.3, QPoint(geometry().x() + 6, geometry().y() - 6));
pAnimation->setKeyValueAt(0.4, QPoint(geometry().x() - 6, geometry().y() - 6));
pAnimation->setKeyValueAt(0.5, QPoint(geometry().x() + 6, geometry().y() + 6));
pAnimation->setKeyValueAt(0.6, QPoint(geometry().x() - 6, geometry().y() + 6));
pAnimation->setKeyValueAt(0.7, QPoint(geometry().x() + 6, geometry().y() - 6));
pAnimation->setKeyValueAt(0.8, QPoint(geometry().x() - 6, geometry().y() - 6));
pAnimation->setKeyValueAt(0.9, QPoint(geometry().x() + 6, geometry().y() + 6));
pAnimation->setKeyValueAt(1, QPoint(geometry().x() - 3, geometry().y() - 3));
pAnimation->start(QAbstractAnimation::DeleteWhenStopped);
  • 语音发送
    创建语音标志在发送消息里,为了发语音的同时还要能听到,发送时要对语音进行接收。一方取消语音时要发送关闭语音广播,另一方同时关闭语音传输。为了保证接收端和发送端同时关闭,这里重写了关闭事件
void autrans::closeEvent(QCloseEvent *e){emit meclose(); //发送关闭信号QWidget::closeEvent(e);
}
  • 表情发送
    创建新的tableview在私聊界面,将表情通过代码加载到UI界面
void priroom::addEmotionItem(int row,int low,int lo)
{QLabel* label1 = new QLabel;QString path = ":/emoji/%1.gif";QMovie *movie =new QMovie(path.arg(lo+1));movie->setScaledSize(QSize(25,25));label1->setMovie(movie);ui->tableWidget->setCellWidget(row,low,label1);movie->start();
}

获取点击的行列位置,计算出图片路径,将表情发送
说一下思路

1 本地存一份表情图,发送用

Qt局域网聊天(私聊/截图/文件/语音)相关推荐

  1. Qt 局域网聊天(功能完善,界面美观,免费下载)

    Qt 局域网聊天(功能完善,界面美观,免费下载) 高清截图 登陆界面 聊天界面 GIF 登陆界面 发送消息 发送图片 设置头像 历史消息 查看名称 房间人数 调整大小 窗体全屏 截屏(最新的Ubunt ...

  2. Qt局域网聊天(群聊和私聊)

    本次设计是一个简易的局域网聊天,功能设计主要分为群聊和私聊两部分,每部分都支持基础聊天以及文件传输功能.参考了<Qt及Qt Quick开发实战精解>中群聊实例,在群聊的基础设计了私聊这部分 ...

  3. 局域网聊天工具-飞秋(FeiQ)的安装与使用

    由于工作的需要,公司内部同事之间的实时沟通交流都是必不可少的,如果公司内部没有自己的实时交流平台,那作为一款免费而小巧实用的局域网聊天或者传送文件的即时通讯软件 - 飞秋(FeiQ),将是不错的选择. ...

  4. QT实现局域网聊天工具(带UDP文件传输)

    三年多以前刚学习QT写的一个局域网聊天工具小项目. 由于是初学QT时写的,代码比较简略,也没时间好好整理项目,仅供大家参考相关TCP以及UDP的连接与传输功能   以及相关控件的基本使用方法. 1. ...

  5. 分享:我的局域网QQ Bing(必应)1.0 正式发布,包括:聊天、视频、语音、电话、截屏、文件传输 等

    分享:我的局域网QQ Bing(必应)1.0 正式发布,包括:聊天.视频.语音.电话.截屏.文件传输 等 百万商业圈 局域网QQ Bing(必应)1.0 正式发布 Bing(必应)是一款优秀的企业局域 ...

  6. 分享:企业内部通信 〖局域网QQ〗Bing(必应)1.0 正式发布,包括:聊天、视频、语音、电话、截屏、涂鸦、文件传输 等

    分享:企业内部通信 [局域网QQ]Bing(必应)1.0 正式发布,包括:聊天.视频.语音.电话.截屏.涂鸦.文件传输 等 局域网QQ Bing(必应)1.0 正式发布 Bing(必应)是一款优秀的企 ...

  7. 基于Qt的P2P局域网聊天及文件传送软件设计

    基于Qt的P2P局域网聊天及文件传送软件设计 zouxy09@qq.com http://blog.csdn.net/zouxy09         这是我的<通信网络>的课程设计作业,之 ...

  8. qt向服务器传输文字_使用Qt实现客户端服务端聊天和传输文件

    [实例简介] 使用Qt实现客户端服务端聊天和传输文件,带有ui设计界面 [实例截图] [核心代码] TcpFile └── TcpFile ├── TcpClient │   ├── TcpClien ...

  9. 基于Qt的QQ局域网聊天

    近几日闲来无事,便想做个东西玩玩,敲敲代码,取取经,玩玩Qt,做点小Demo.参考多方资料,结合了众多网友的技术,做了一个基于Qt的QQ局域网聊天软件. 源码下载:https://joeyos.git ...

最新文章

  1. 学习编写Unity计算着色器 Learn to Write Unity Compute Shaders
  2. grails指定环境
  3. CTFshow php特性 web99
  4. c盘扩展卷是灰色的_技术丨电脑C盘装太满?这几招轻松释放空间
  5. Intel格式和ATT格式汇编区别
  6. 人工智能的本质:最优化 (神经网络优化算法python手写实现)
  7. 能将三次握手理解到这个深度,面试官拍案叫绝!
  8. Asp.net Ajax 的 PageRequestManager类的事件
  9. 移动营销的魔力:让你的客户无处可逃(附赠2012移动营销百问百答手册)
  10. Django视图层:Django便捷函数,render()函数返回HttpResponse对象,redirect()函数返回HttpResponseRedirect指向传递参数的URL
  11. Wordpress 2.91 的一些良好改进
  12. extremecomponents
  13. 图文并茂!CIC滤波器的FPGA实现
  14. 获取深户股市列表api_获取股票api
  15. python爬取饿了么_python爬取饿了么
  16. 在线图片转文字怎么转?这两种方法简单又实用!
  17. 设计模式(四):模板方法模式、迭代器和组合模式、状态模式
  18. 阿里云服务器运行环境配置教程
  19. 朱松纯领衔、北大清华超强联合,开启「通用人工智能实验班」
  20. ORACLE使用dbv工具检验数据文件是否有坏块

热门文章

  1. 【读书笔记】舆情分析浅谈:读《论新媒体发展背景下网络舆情的发展及治理》有感
  2. java操作mysql导表_java导出数据库的全部表到excel
  3. 在 iOS 平台开发应用并发布到 App Store 上销售,要走哪些流程
  4. matlab清除所有图形窗口,matlab图形操作基础
  5. Oracle drop删表后的数据恢复
  6. 使用Win32 SDK开发屏幕保护程序
  7. [ANT]apache ant 安装说明
  8. 踏寻MYIE的轨迹—Maxthon的前世今生(转)
  9. Kafka异常问题记录
  10. CANoe操作介绍系列 ———— 两种测试节点的添加与配置