用到的头文件
Def.h
#ifndef DEF_H
#define DEF_H
#define SERVER_PORT "10099"
#define SERVER_IP "192.168.169.1"
#endif // DEF_H
Registre.h
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include "def.h"
#include <QJsonObject>
#include <QJsonArray>
#include<QJsonDocument>
#include<QJsonValue>
class Register : public QDialog
{
Q_OBJECT
public:
explicit Register(QWidget *parent = nullptr);
//放到成员变量里
QLineEdit* username;
QLineEdit* password;
QLineEdit* password2;
QNetworkAccessManager* man;
signals:
public slots:
void slotReg();
void slotNetworkApply(QNetworkReply*);
};
#endif // REGISTER_H
如果之前有主窗口 那么main.window
#include "register.h"
增加的按钮 还有定义的信号和槽
QMenuBar* bar = menuBar();
QMenu* menu = bar->addMenu("文件");
menu->addAction("打开", this, SLOT(slotOpen()));
menu->addAction("暂停", this, SLOT(slotPause()));
menu->addAction("继续", this, SLOT(slotResume()));
menu->addAction("退出", this, SLOT(close()));
menu->addAction("登录",this,SLOT(slotLogin()));
menu->addAction("注册",this,SLOT(slotRegister()));
QStatusBar* status = statusBar();
status->addWidget(slider = new QSlider(Qt::Horizontal));
status->addWidget(speed = new QLineEdit);
void MainWindow::slotRegister()
{
Register r;
r.exec();
}
//register.cpp
#include "register.h"
#include <QString>
Register::Register(QWidget *parent) : QDialog(parent)
{
//放到成员变量里
// QLineEdit* username;
// QLineEdit* password;
// QLineEdit* password2;
QPushButton* r;
QVBoxLayout* lay = new QVBoxLayout(this);
lay->addWidget(username= new QLineEdit);
lay->addWidget(password=new QLineEdit);
lay->addWidget(password2=new QLineEdit);
lay->addWidget( r= new QPushButton("注册"));
username->setPlaceholderText("请输入用户明");
password->setPlaceholderText("请输入密码");
password2->setPlaceholderText("密码确认");
this->setWindowTitle("注册");
connect(r,SIGNAL(clicked()),this,SLOT(slotReg()));
//窗口释放 对象也释放掉 +上this 是这意思
man = new QNetworkAccessManager(this);
connect(man,SIGNAL(finished(QNetworkReply*)),this,SLOT(slotNetworkApply(QNetworkReply*)));
}
void Register::slotReg()
{
QString username = this->username->text();
QString password = this->password->text();
QString password2 = this->password2->text();
if(password!=password2)
{
QMessageBox::warning(NULL,"注册失败","密码输入错误");
return;
}
//把注册信息提交到服务器 libcurl
QNetworkRequest req;
QString url=QString("http://%1:%2/reg").arg(SERVER_IP).arg(SERVER_PORT);
//下面这种拼接必须同类型
//QString temp =QString("http://%1:%2/reg").arg(SERVER_IP,SERVER_PORT);
//QUrl url1(temp);
req.setUrl(url);
//gaosu fu wuqi shi json geshi
req.setHeader(QNetworkRequest::ContentTypeHeader,"application/json");
// req.setUrl();
//req.setUrl(&(QUrl(QString("http://%1/user").arg(SERVER_IP))));
//req.setUrl(QUrl(QString("http://%1").arg(SERVER_IP)));
//man->post();
/*
username:xxx
passwd:yyy
*/
QJsonObject obj;
obj.insert("username",username);
obj.insert("password",password);
QByteArray data = QJsonDocument(obj).toJson();
man->post(req,data);
//man->post()
}
void Register::slotNetworkApply(QNetworkReply*)
{
}
中间涉及到 没有指定json的问题
这里只是发送 接受的尚未完善
接受数据如下
void Register::slotNetworkApply(QNetworkReply *reply )
{
if(reply->error()!=QNetworkReply::NoError)
{
QMessageBox::warning(this,"注册失败","网络错误");
return ;
}
QByteArray data = reply->readAll();
QJsonDocument doc =QJsonDocument::fromJson(data);
QJsonObject obj = doc.object();
QString result = obj.value("result").toString();
if(result=="ok")
{
QMessageBox::warning(this,"注册成功","尽情享用");
accept();//关闭对话框
}
else
{
QString info = QString("服务器返回错误:%1,请联系技术人员").arg(obj.value("reason").toString());
QMessageBox::warning(this,"注册失败",info);
}
}
qt 发送数据到http
最新推荐文章于 2024-08-05 11:01:26 发布