QT网络编程部分---Qt登陆请求PHP脚本实现登陆

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aicamel/article/details/51533444

今天看了一下Qt网络编程这一块的知识,写了一个登陆界面,通过网络请求PHP脚本,来实现登陆验证。

大体思路是这样的:点击登陆按钮时,将账号和密码发送到PHP脚本进行判断,然后接收返回来的值,进行判断。

1.新建QtGui应用,项目名称为postceshi,基类使用默认的QWidget即可,类名为Widget。

2.完成后打开postceshi.pro文件,然后添加下面一行代码来使用网络模块:
QT += network
3.下面打开widget.ui文件进入设计模式,向界面上加入两个标签、两个l单行文本框和一个按钮。效果如下图所示。
这里写图片描述
4.打开widget.h文件,先包含头文件:#include
然后添加private私有对象定义:

QNetworkReply *reply;
QString results;
QNetworkAccessManager *manager;
QNetworkRequest *request;
QByteArray *parmanager;

添加一个私有槽声明:
private slots:
void panduan(QNetworkReply*);//请求结果判断
void on_pushButton_clicked();//登陆按钮槽函数
void commper();//登陆判断槽函数

最后添加一个信号:

signals:
void lalala();//用于判断接收网络应答的结果判断,若不为空发送信号

5.下面到widget.cpp文件中,先在构造函数中添加如下代码:
manager = new QNetworkAccessManager; connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(panduan(QNetworkReply*)));
connect(this,SIGNAL(lalala()),this,SLOT(commper()));

这里先创建了一个QNetworkAccessManager类的实例,它用来发送网络请求和接收应答。然后关联了管理器的finished()信号和我们自定义的槽panduan(QNetworkReply*),每当网络应答结束时都会发射这个信号。最后使用了pos()函数来发送一个网络请求和数据,网络请求使用QNetworkRequest类表示。QT里的post()是这样的:
QNetworkReply *post(const QNetworkRequest &request, QIODevice *data);
QNetworkReply *post(const QNetworkRequest &request, const QByteArray &data);
QNetworkReply *post(const QNetworkRequest &request, QHttpMultiPart *multiPart);

6.下面添加槽的定义:

void Widget::panduan(QNetworkReply *reply)
{
results = "";
if(reply->error() == QNetworkReply::NoError)
{
QByteArray bytes = reply->readAll();
results.prepend(bytes);//结果已经存到results中
if(results.length() != 0)
{
emit lalala();//如果results长度不为0,发送信号
}
}
}

void Widget::on_pushButton_clicked()
{
QString str = "zhanghao="+ui->lineEdit->text()+"&mima="+ui->lineEdit_2->text();
QString url = "http://localhost/PHPtext/welcome.php";
qDebug()<<ui->lineEdit->text()<<ui->lineEdit_2->text();//打印下账号和密码
parmanager = new QByteArray(str.toUtf8());
request = new QNetworkRequest(QUrl(url));
request->setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/x-www-form-urlencoded"));
reply = manager->post(*request,*parmanager);
}

void Widget::commper()
{
if(results == "OK")
QMessageBox::information(0,tr("提示"),tr("登陆成功!"));
else
{
QMessageBox::information(0,tr("提示"),tr("账号或者密码错误,请重新输入!"));
}
}

7.PHP脚本代码如下:
<?php
if($_POST["zhanghao"] == "123" && $_POST["mima"] == "456")
echo "OK";
else
echo "Error";
?>

对于Qt发过来的账号和密码进行判断,如果账号密码正确返回一个OK,负责返回一个Error.
8.效果如下所示。
这里写图片描述
这里写图片描述

这样就实现了登陆界面通过网络请求PHP脚本实现登陆。
另外,代码中的各种命名不是一个好的程序员所应该拥有的,望大家注意。

猜你喜欢

转载自blog.csdn.net/aicamel/article/details/51533444