Qt编程—我的QQ(局域网可用)

       上一篇文章提到Qt编程—去掉标题栏和设置窗口透明用法 在做这个就用到了,效果还是挺不错的

1.这里我就分享一下模拟QQ的局域网聊天程序框架——qt编程的QQ迷你版微笑

想要源代码学习的朋友可以在下面留言板上留下你的邮箱。

这里用到的透明效果上篇介绍过就不用多说了,关键的几句

  1.   this->setWindowFlags(Qt::FramelessWindowHint);//去掉标题栏  
  2.     // this->setGeometry(QRect(850, 55, 450, 260));//可设置窗口显示的方位与大小  
  3.   
  4.     //this->setWindowOpacity(0.7);//设置透明1-全体透明  
  5.     this->setAttribute(Qt::WA_TranslucentBackground, true);//设置透明2-窗体标题栏不透明,背景透明 

 

2.服务器界面

Qt编程—我的QQ(局域网可用)_第1张图片

3.登录界面

Qt编程—我的QQ(局域网可用)_第2张图片Qt编程—我的QQ(局域网可用)_第3张图片

一小部分的流程图:

Qt编程—我的QQ(局域网可用)_第4张图片

 

 

这只是其中小部分的流程图,希望大家看的明白……我也不过多的贴代码了

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.注册和皮肤界面——风格切换

Qt编程—我的QQ(局域网可用)_第5张图片Qt编程—我的QQ(局域网可用)_第6张图片

5.音乐播放器

Qt编程—我的QQ(局域网可用)_第7张图片

音乐界面-这个没做网络

Qt编程—我的QQ(局域网可用)_第8张图片

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();
}

 

你可能感兴趣的:(编程,qq,qt,Creator)