**
1.简介
**
1.基本功能
本次设计参考了《Qt5.9 C++开发指南》一书中关于TCP和UDP的介绍及封装的类,也参考了一些其他前辈的代码。
基本的功能:
使用UDP进行组网聊天
使用TCP进行文件传输
能够更改字体,字体大小,粗体,斜体,下划线和字体颜色
能保存聊天记录,清空聊天记录等
2.特别功能
添加功能如下:
修改中文乱码问题
能够实现更改界面样式
支持Enter键发送 消息
能够构建实现备注用户姓名,并在聊天区中进行显示
3 效果
3.1 设置备注的效果
这里借用了Qt中对 代理类 的重写,使其能够满足显示个人图片和设置备注名,并将备注名改到磁盘中保存。下一次登录的时候会自动识别并显示备注名。
3.2 文件的传输


3.2.1实现原理
利用TCP进行文件的传输。在Qt中对TCP、UDP有完整的封装模块,关于模块间的函数及使用方法大家可以参考《Qt5.9 C++开发指南》这本书
3.3 样式切换
3.3.1 暗黑模式
特点功能:备注名
其实这一块的代码还是比较简单的部分,我其实就是封装了一个类用来对局域网中的用户进行备注筛选,这里将备注信息是直接保存到磁盘里面。显示用户列表的类对它进行事件重写,使其能够显示上下文菜单实现备注的输入
class DataManagement:
"""
作用:做数据操作类,主要涉及数据的保存,数据的插入,数据的查询,数据的载入
"""
names = []
def save_dn(self, nameslist):
with codecs.open("names.dat", "wb") as f:
pickle.dump(nameslist, f)
def query_dn(self,query_dic):
self.names = self.load()
if len(self.names)==0:
return -1
else:
for name in self.names:
if query_dic["oldname"] == name["oldname"]:
if "newname" in name.keys():
if name["newname"] != "":
return name["newname"]
else:
return 0
else:
return -1
def query_index(self,query):
self.names = self.load()
print(self.names)
if len(self.names)==0:
return -1
else:
for index,name in enumerate(self.names):
if len(name) == 2: # 已经有备注了
if query == name["newname"]:
return index
elif len(name) == 1: # 暂时还没有备注
if query == name["oldname"]:
return index
def load(self):
"""
载入数据
"""
pathname = "names.dat"
if not(os.path.exists(pathname) and os.path.isfile(pathname)):
with codecs.open("names.dat", "wb") as f:
pickle.dump(self.names, f)
with codecs.open("names.dat", "rb") as f:
names = pickle.load(f)
return names
其余逻辑代码有需要的朋友可以私聊我获取。
版权声明:本文为qq_39143594原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。