Qt实现基于P2P的局域网即时通信系统

Links

参考

初学Qt之——动态增加组件
基于Qt的类似QQ好友列表抽屉效果的实现
基于Qt的局域网即时通信系统设计与实现(提供各种版本的源代码)

完整工程下载

Qt实现P2P局域网聊天软件

前期准备

Qt实现UDP通信简例
Qt实现TCP通信简例
Qt实现UDP广播简例
Qt实现TCP文件传输例子

Qt生成release版

  1. 在 Qt Creator 左下角改一个设置:
    release
  2. 点绿色三角形编译运行过之后,在和工程文件同目录下,有个装着编译出来的可执行文件的文件夹,形如:
    release_diretory
    里面有两个子文件夹,一个叫debug,另一个叫release,因为先前选了release,故可执行文件在release那个子目录下,但里面那个还不想要的release版的
  3. release里那个.exe文件复制到一个空文件夹下,如在桌面新建一个叫TomChat的新文件夹,复制到里面
  4. Qt 有个自带的终端(Terminal / Console),应该在开始菜单里可以找到
    Qt_Term
  5. 在终端里更改工作目录到刚刚那个新建的文件夹里,如执行
    cd /d C:\Users\Tom\Desktop\TomChat
    然后用 Qt 自带的工具windeployqt来生成release版,执行
    windeployqt iTom.exeiTom.exe 是那个可执行文件的名字)
    命令执行完成后,就成功生成了release版,类似于免安装的软件那样,把文件夹拷走就可以用。windeployqt
    windeployqt 时可能会弹框说缺少若干个什么什么.dll文件的,但去看Qt的目录发现这些.dll文件其实是有的,我当时是通过环境变量path中把Qt那条上移到第一条解决的(之前为了给vim配gcc,添加了codeblocks里mingw的目录进去,不知道是不是跟这有关)
    qt_path

程序架构

  1. 登录界面(LoginDialog)
    • 最先出现,用于获取用户本次登录所起的用户名,并传递给主界面;
  2. 主界面(iTom)
    • 主界面是一个叫iTom的类,主要包含一个好友列表(FriendList)、一个退出按钮;
    • 主界面拥有QUdpSocket、QTcpServer、QTcpSocket,在后台负责广播上线消息(登录时)、广播下线消息(退出时)、回复上线广播(收到别人上线广播后)、统一接收聊天信息并转传给相应的好友名片(FriendButton)、接收文件;
  3. 好友列表(FriendList)
    • 朋友列表就是盗版QQ的朋友列表(但没有分组),用于存放好友名片(FriendButton),主要是展示功能;
    • 列表里默认有个Broadcast的好友名片,用于广播信息;
  4. 好友名片(FriendButton)
    • 好友名片就是像QQ好友列表里展示好友的那种东西,之所以叫button 是因为继承自QPushButton,点击呼出与相应好友的聊天窗口(ChatWindow)
  5. 聊天窗口(ChatWindow)
    • 包含显示聊天信息的显示框、信息编辑框、发送信息按钮、发送文件按钮;
    • 聊天窗口不负责接收信息,而是来自主界面的转传,但负责发信息、选择并发送文件;
    • 广播的窗口不能发送文件,所以它的文件发送按钮被禁用