【11.简单聊天室实现】

简单聊天室实现

概述

服务器无界面,主要功能是接收客户端消息,广播给每个客户端,以及访问数据库实现客户端登录、注册
客户端采用单线程,包括主界面、登录界面与注册界面
主界面与登录界面通过信号槽进行通信,注册界面作为登录界面的成员通过信号槽进行通信

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWidget w;
    Login l;
    QObject::connect(&l, &Login::send_W, &w, &MainWidget::recv_L);
    QObject::connect(&w, &MainWidget::send_L, &l, &Login::recv_W);
    l.show();
    return a.exec();
}

类之间的通信数据类型使用自定义结构体,方法之一为使用Q_DECLARE_METATYPE,将结构体注册为元对象,使用QVariant打包数据并发送,在槽函数中将QVariant解包成自定义的结构体

enum UIMSG_TYPE {
	WL_NETOK,
	LW_USERDATA,
	WL_USERDATA,
	LW_USEROK,
	WL_UNNET,
	LW_RECONN,
};

struct UIMSG
{
	UIMSG_TYPE msg_type;
	QString msg;
	UIMSG() {};
	UIMSG(UIMSG_TYPE msg_type_, QString data_ = QString::null) :msg_type(msg_type_), msg(data_) {}
};
Q_DECLARE_METATYPE(UIMSG);

打包:

UIMSG m(LW_RECONN);
QVariant msginfo;
msginfo.setValue(m);
emit send_W(msginfo);

解包:

UIMSG msg = msg1.value<UIMSG>();
UIMSG_TYPE msg_type = msg.msg_type;
QString data = msg.msg;

结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值