一、前言
微信作为通信交流工具已经成为生活中不可或缺的一环,通过微信可以完成网络中随时随地的聊天,文件传输,朋友圈等功能,本文将通过Qt实现仿真微信程序,包含登录,好友列表,聊天,文件传输等功能。
二、界面设计
程序由登录,聊天,文件传输,文件接收四个界面构成,通过调用不同界面的不同模块完成相应的功能
1.登录界面
通过设计label空间并填入背景图片,通过LineEdit接收输入的账户密码,PushButton调用登录功能
2.聊天界面
聊天界面左侧是好友列表框,记录已上线的用户,右侧是聊天记录框,记录发送的消息,输入框喝发送按钮如下
3.文件传输界面
文件传输界面由文件选择,发送,进度条,大小和停止组成,分别实现不同的功能
4.文件接收模块
文件接收模块由大小显示,进度条和停止按钮组成
三、模块功能设计和具体代码
1.登录功能
运行程序首先出现的是登录界面,通过读取数据库存储的用户信息和密码进行读取判定,当数据库中不存在对应用户时,提示无用户,用户名和密码不匹配时提示密码错误。
首先进行数据库初始化,通过设置数据库名和密码进行数据库打开,并通过按钮信号调用登录验证功能。
void LoginDialog::Init()
{
db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("test");
db.setHostName("localhost");
db.setUserName("root");
db.setPassword("root");
QSqlQuery query(db);
db.open();
}
登录验证功能首先接收LineEdit中的用户名进行SQL筛选查询对应用户名的密码,同时通过exec(),next()导航到有效记录,使用next()的原因是因为exec()执行SQL查询后,查询将放置在无效记录上,并且必须先导航到有效记录上才能检索数据值,因此调用next()将检索结果中的下一条记录,并将查询定位在检索到的记录上。
void LoginDialog::showWeChatWindow()
{
QSqlQuery query;
QString name = ui->usrLineEdit->text();
QString sel1 = QString("select pwd from user where name = '%1'").arg(name);
query.exec(sel1);//查询数据库对应用用户名的密码
if(query.next())
{
QString pwd1 = query.value(0).toString();
QString pwd2 = ui->pwdLineEdit->text();
if(pwd2 == pwd1)
{
//密码正确
weChatWindow = new MainWindow(this);
weChatWindow->setWindowTitle(ui->usrLineEdit->text());
// this->close();
weChatWindow->show();//显示聊天窗口
}
else
{
//密码错误
QMessageBox::warning(this,"提示","密码错误,请重新输入");
ui->pwdLineEdit->clear();
ui->pwdLineEdit->setFocus();
}
}
else
{
//未查询到用户
QMessageBox::warning(this,"提示","此用户不存在!请重新输入");
ui->usrLineEdit->clear();
ui->pwdLineEdit->clear();
ui->pwdLineEdit->setF