1. 程式人生 > >QT網路程式設計部分---Qt登陸請求PHP指令碼實現登陸

QT網路程式設計部分---Qt登陸請求PHP指令碼實現登陸

今天看了一下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指令碼實現登陸。
另外,程式碼中的各種命名不是一個好的程式設計師所應該擁有的,望大家注意。