上一篇文章提到Qt编程—去掉标题栏和设置窗口透明用法 在做这个就用到了,效果还是挺不错的
1.这里我就分享一下模拟QQ的局域网聊天程序框架——qt编程的QQ迷你版
想要源代码学习的朋友可以在下面留言板上留下你的邮箱。
这里用到的透明效果上篇介绍过就不用多说了,关键的几句
2.服务器界面
3.登录界面
一小部分的流程图:
这只是其中小部分的流程图,希望大家看的明白……我也不过多的贴代码了
1.,Tcp收到客户的APP_PROTOCOL_REGISTER消息
往数据库中插入一条记录
insert into users(id, password,nikeName, email, sex, birthday,imageId,other, state)
有两种情况:
插入失败:账号已经存在,发送APP_PROTOCOL_LOGIN_FAILED消息
插入成功:发送APP_PROTOCOL_REGISTER_SUCCESS消息
登录:
Tcp收到客户的APP_PROTOCOL_LOGIN消息。
查询数据库( select * from users where id……)
看账号是否存在
若不存在,发送APP_PROTOCOL_LOGIN_FAILED消息。
若存在,验证帐号密码是否正确
若正确,查询登录状态
修改用户状态为1->USER_STATE_ONLINE;
发送格式如下:
QStringmsgType = “ APP_PROTOCOL_LOGIN”
…
out << msgType;
发送格式如下:
QStringmsgType = " APP_PROTOCOL_REGISTER_SUCCESS ";
…
out << msgType;
4.注册和皮肤界面——风格切换
5.音乐播放器
音乐界面-这个没做网络
6.聊天界面和托盘效果
//创建本系统托盘
minimizeAc = NULL;//最小化
maximizeAc = NULL;//最大化
restoreAc = NULL;//还原
quitAc = NULL;//退出
QIcon icon = QIcon(":images/QQ.png");
setWindowIcon(icon);
trayIcon = new QSystemTrayIcon(this);
trayIcon->setIcon(icon);
trayIcon->setToolTip("a trayicon example");
createAc();
createTrayim();
trayIcon->show();
setWindowTitle(tr("Systray"));
connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason)));
voidClientFriends::createAc()//托盘右击菜单
{
minimizeAc = new QAction(tr("最小化 (&I)"), this);
minimizeAc->setIcon(QIcon(":images/xh.png"));
connect(minimizeAc, SIGNAL(triggered()), this, SLOT(hide()));
maximizeAc = new QAction(tr("最大化 (&X)"), this);
maximizeAc->setIcon(QIcon(":images/dh.png"));
// maximizeAc->setSeparator(true);//加横隔条
connect(maximizeAc, SIGNAL(triggered()), this, SLOT(showMaximized()));
restoreAction = new QAction(tr("还原 (&R)"), this);
restoreAction->setIcon(QIcon(":images/hy.png"));
connect(restoreAc, SIGNAL(triggered()), this, SLOT(showNormal()));
quitAction = new QAction(tr("退出 (&Q)"), this);
quitAction->setIcon(QIcon(":images/tc.png"));
connect(quitAc, SIGNAL(triggered()), this, SLOT(on_pushButton_exit_clicked()));
}
void ClientFriends::createTrayim()
{
//设置右键点击时弹出的菜单
trayIconMenu = new QMenu(this);
trayIconMenu->addAction(minimizeAction);
trayIconMenu->addAction(maximizeAction);
trayIconMenu->addAction(restoreAction);
trayIconMenu->addSeparator();
trayIconMenu->addAction(quitAction);
trayIcon->setContextMenu(trayIconMenu);
}
void ClientFriends::slotMusic(QModelIndex index, int row)//双击进入音乐系统
{
// QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
w.show();
}