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