因计划调整缘故,可直接从(五)看起。
目录
一、设计登录、注册界面
利用所学的QT知识,利用可视化设计了一个基础的界面;
由于QT窗口自带一个较为丑陋的边框,为了后续方便设计,调用相关函数去掉边框;
//去掉边框
setWindowFlags(Qt::WindowType::FramelessWindowHint);
但是去掉边框后,界面便不可移动等,查询解决方法后,重写了鼠标按压事件和点击事件函数;
//计算鼠标与窗口左上角差值
void Login::mousePressEvent(QMouseEvent *event){
dPos = event->globalPos() - this->pos();
}
//移动窗口
void Login::mouseMoveEvent(QMouseEvent *event){
move(event->globalPos()-this->dPos);
}
目前效果如下图(暂定,后续可能会更改设计,如添加图标等):
二、实现登录注册功能
本软件基于腾讯云im进行设计,由于官网文件Windows端QT相关的导入内容不够,故花费了一些时间在相关SDK的导入上;
随后阅读了使用的相关文档;并完成了初始化SDK;
其中,由于使用过程中是通过JSON文件进行数据传输,故我先对Json以及Qt有关Json和网络通信的内容进行了一些相应的简单学习;
登录注册的流程如下:
部分代码如下:
if (json_error.error == QJsonParseError::NoError) {
if (doucment.isObject()) {
const QJsonObject obj = doucment.object();
qDebug() << obj;
if(obj.contains("code")){
QString thecode=obj.value("code").toString();
if(thecode=="400"){
QString themsg=obj.value("msg").toString();
ui->register_useridrepeattip->setText(themsg);
ui->register_useridrepeattip->show();
reg_success.show();
}
else{//失败
}
}
}
}
void Login::on_loginbtn_clicked()
{
const char* user_id;
const char* user_sig;
//post
QNetworkRequest request1;
request1.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
QEventLoop eventLoop;
connect(m_accessManager,SIGNAL(finished(QNetworkReply*)),&eventLoop,SLOT(quit()));
QString userid=ui->userid->text();
//z转char
QByteArray tran=userid.toUtf8();
user_id=tran.data();
QString pass=ui->password->text();
//request1.setUrl(QUrl("http://124.221.248.254:8081/login?userid="+userid+"&&password="+pass));
request1.setUrl(QUrl("http://124.221.248.254:8081/user/login"));
//json处理
QJsonObject json;
json.insert("password",pass);
json.insert("userid",user_id);
QByteArray postData=QJsonDocument(json).toJson(QJsonDocument::Compact);
QString str(postData);
//qDebug()<<postData;
QNetworkReply* initReply = m_accessManager->post(request1,str.toUtf8());
eventLoop.exec();
QByteArray responseData;
responseData=initReply->readAll();
qDebug()<<"responseData is"<<responseData;
QJsonParseError json_error;
QJsonDocument doucment = QJsonDocument::fromJson(responseData, &json_error);
if (json_error.error == QJsonParseError::NoError) {
if (doucment.isObject()) {
const QJsonObject obj = doucment.object();
qDebug() << obj;
//qDebug() << "in najnd";
if (obj.contains("data")) {
const QJsonObject obj_data = obj.value("data").toObject();
if (obj_data.contains("tel"))
{
QString token = obj_data.value("tel").toString();
//qDebug() << token;
}
if (obj_data.contains("userSig"))
{
QString sig = obj_data.value("userSig").toString();
//qDebug()<<"5555555555555555555555555555"+sig;
//转char*
QByteArray ba=sig.toUtf8();
//qDebug()<<"666666666666666666666666666666666"+ba;
user_sig=ba.data();
const void* user_data=nullptr;
TIMLogin(user_id,user_sig,[](int32_t code,const char* desc, const char* json_param, const void* user_data){
if (code != ERR_SUCC) {
// 登入失败
loginsuccess=false;
qDebug()<<"LOGIN fail!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
return;
}
else{
islogin=true;
qDebug()<<"login in!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
}
},user_data);
QtConcurrent::run(this,&Login::emitLogin_success);
}
}
}
}
}