4.17
一.设计思路
主体用toolBox
做好友列表。用两个string列表
分别存头像图片名称和好友名字,好友用按钮QToolButton
添加名字和头像图片并令其同时显示。
arg()
函数有两个参数,第一个参数是带有占位符的字符串,第二个参数是要替换的值。如果有多个占位符,则可以使用多个arg()函数来进行替换。这里用来替换图片路径。
二.问题
dialoglist.cpp
QStringList and QList<QString>
前者继承于后者,- 某些图片加入resource显示不出,重新添加后可以显示但编译报错 我猜测是在编译文件中之前添加的图片引起的问题。在大哥的指点下把编译产生的文件删除重新编译就行。因为QT默认影子构建(将源码路径和构建路径分开),编译时之前的图片对里面产生了影响但是更改时只删了原图片,结果报了奇怪的错误。
4.18
一.设计功能
构建聊天窗口界面
设置信号槽 点击头像出现对话框并防止重复弹出同一个对话框
二.设计思路
设置bool数组记录每个好友状态(是否已经弹出聊天框)isShow
,在弹出和关闭时更新。
连接好友按钮,点击时弹出聊天框。
三.问题
如何实现关闭时更新isShow
。
刚开始我对聊天窗口类Widget
里的按钮btnClose
添加槽函数,但是访问不到主列表dialoglist
里的isShow
。
解决:跨类连接时,需要通过emit
发送信号。本项目中,关闭时在聊天窗口类自带的closeEvent
函数中发送信号让主列表可以连接到信号,从而更新isShow
。
4.19
一.设计功能
发送udp消息到聊天框,监听其他人发送的消息。
二.设计思路
1.通过UdpSocket
实现信息交流。
使用这个类最常见的方法是使用bind()绑定到一个地址和端口
然后调用writeDatagram()和readDatagram() / receiveDatagram()来传输数据。
2.消息类型有3种,分别为聊天信息,用户进入信息,用户离开信息,接受到不同消息时进行不同处理。
原作者使用enum MsgType{Msg, UserEnter, UserLeft}区分消息类型,简单点也可以直接用变量表示不同状态
3.发送消息
QByteArray array;
QDataStream stream(&array, QIODevice::WriteOnly);
stream << type << getUser();
流连接数组,输入到流就会传到数组里,再通过writeDatagram写入
4.接收消息与发送消息一样,流程相反。
这个项目到这里基本完结了,我做到一半发现是udp(群聊),本来打算做tcp(点对点),看看能不能更新一下。