国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【QT 網(wǎng)絡云盤客戶端】——登錄界面功能的實現(xiàn)

這篇具有很好參考價值的文章主要介紹了【QT 網(wǎng)絡云盤客戶端】——登錄界面功能的實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1.注冊賬號

2.服務器ip地址和端口號設置

3. 登錄功能

4.讀取配置文件

5.顯示主界面


1.注冊賬號

【QT 網(wǎng)絡云盤客戶端】——登錄界面功能的實現(xiàn),qt網(wǎng)絡云盤,服務器,運維

1.點擊注冊頁面,將數(shù)據(jù) 輸入 到?用戶名,昵稱,密碼,確認密碼,手機,郵箱 的輸入框中,

點擊確定,觸發(fā)槽函數(shù)?on_reg_but_clicked。

2.on_reg_but_clicked 會校驗 各個輸入框中數(shù)據(jù)格式 的合法性,比如說手機號只能由數(shù)字組成。

使用正則表達式進行檢驗

3.如果數(shù)據(jù)沒問題,則客戶端發(fā)送一個http請求給服務器:

POST http://119.23.41.13:80/register HTTP/1.1
Content-Type: application/json

{
    "email": "sjp3250506022@qq.com",  //郵箱
    "firstPwd": "e10adc3949ba59abbe56e057f20f883e",//密碼,用md5值進行加密
    "nickName": "lisi", //昵稱
    "phone": "13727989171", //電話號碼
    "userName": "lisi"  //用戶名
}

服務器響應:


"code":	"002" //賬號注冊成功
"code":	"003" //用戶已經(jīng)存在
"code":	"004" //賬號注冊失敗

?實現(xiàn):

//注冊框的流程
void Dialog::on_reg_but_clicked()
{
        /*
          1.獲取輸入框中的數(shù)據(jù)
          2.校驗數(shù)據(jù)格式是否正確
          3.封裝http請求,發(fā)送http請求
          4.接收http響應,處理http響應
        */
        QString usr=ui->usr_edit->text();
        QString nickname=ui->nickname_edit->text();
        QString password=ui->pasword_edit2->text();
        QString confirmpassword=ui->confirm_edit->text();
        QString mail=ui->mailbox_edit->text();
        QString phone=ui->phone_edit->text();
        QRegExp reg(USER_REG);

        //校驗賬號的規(guī)則
        if(!reg.exactMatch(usr))
        {
            //校驗失敗
            QMessageBox::warning(this,"警告","輸入的賬號格式有誤");
            return;
        }

        reg.setPattern(PASSWD_REG);
        if(!reg.exactMatch(password)){
            QMessageBox::warning(this,"警告","輸入的密碼格式有誤");
            return;
        }

        reg.setPattern(EMAIL_REG);
        if(!reg.exactMatch(mail)){
            QMessageBox::warning(this,"警告","輸入的郵箱格式有誤");
            return;
        }

        reg.setPattern(PHONE_REG);
        if(!reg.exactMatch(phone)){
            QMessageBox::warning(this,"警告","輸入的手機號碼格式有誤");
            return;
        }

        if(confirmpassword!=password){
            QMessageBox::warning(this,"警告","確認密碼不匹配");
            return;
        }

        //
        QNetworkAccessManager* manger=new QNetworkAccessManager();
        //封裝http請求
        QNetworkRequest request;
        //從配置文件中獲取到ip地址和port端口號
        QString ip=Common::getInstant()->getConfValue("web_server","ip");
        QString port=Common::getInstant()->getConfValue("web_server","port");
        QString url=QString("http://%1:%2/register").arg(ip).arg(port);
        request.setUrl(QUrl(url));
       //設置文件類型
        request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
        //將data數(shù)據(jù)以QJson的格式發(fā)送給服務器

        QJsonObject object;
        object.insert("email", mail);//郵箱
        object.insert("userName", usr);//賬號
        object.insert("phone", phone);
        object.insert("nickName", nickname);
        object.insert("firstPwd", m_common->getStrMd5(password));
        QJsonDocument doc(object);

        QByteArray data=doc.toJson();
        //發(fā)送數(shù)據(jù)
        QNetworkReply* rely=manger->post(request,data);
        connect(rely,&QNetworkReply::readyRead,this,[=]{
            //響應到達,讀取所有的數(shù)據(jù)
            QByteArray s=rely->readAll();
             qDebug() << "服務器返回數(shù)據(jù):" << QString(s);
             //將s數(shù)據(jù)轉換為Json對象
              QJsonParseError err;
             QJsonDocument document=QJsonDocument::fromJson(s,&err);

            if(err.error!=QJsonParseError::NoError){
                qDebug()<<"QJson格式錯誤";
                return;
            }
            //將QJson字符串轉換為QJson對象
            QJsonObject object1;
            object1=document.object();

            //獲取狀態(tài)碼
            QString value1=object1["code"].toString();
            if(value1=="002"){
                QMessageBox::information(this,"提示","賬號注冊成功");
            }

            if(value1=="003"){
                QMessageBox::warning(this,"警告","該賬號已經(jīng)存在");
            }

            if(value1=="004"){
                QMessageBox::critical(this,"注冊失敗","注冊失敗");
            }
             rely->deleteLater();
       });
}

2.服務器ip地址和端口號設置

【QT 網(wǎng)絡云盤客戶端】——登錄界面功能的實現(xiàn),qt網(wǎng)絡云盤,服務器,運維

?文章來源地址http://www.zghlxwxcb.cn/news/detail-614377.html

1.點擊 確定 按鈕,獲取服務器 ip 和端口號的 信息

2.驗證服務器 和 端口號的格式,如果驗證成功,將 服務器的 ip地址和 端口號寫入到 cfg.json 配置文件中。

【QT 網(wǎng)絡云盤客戶端】——登錄界面功能的實現(xiàn),qt網(wǎng)絡云盤,服務器,運維

?

 //點擊服務器設置頁的按鈕,將ip地址和端口寫入到配置文件中
void Dialog::on_ok_button_clicked()
{
    QString ip=ui->ip_edit->text();
    QString port=ui->port_eidt->text();
    QRegExp reg(IP_REG);
    //校驗賬號的規(guī)則
    if(!reg.exactMatch(ip))
    {
        //校驗失敗
        QMessageBox::warning(this,"警告","輸入的IP地址有誤");
        return;
    }

     reg.setPattern(PORT_REG);
    //校驗賬號的規(guī)則
    if(!reg.exactMatch(port))
    {
        //校驗失敗
        QMessageBox::warning(this,"警告","輸入的端口號有誤");
        return;
    }

    m_common->writeWebInfo(ip,port);
    QMessageBox::warning(this,"提示","配置成功");
    ui->stackedWidget->setCurrentWidget(ui->login_page);
    return;
}


// 將服務器的ip和port寫入到配置文件
void Common::writeWebInfo(QString ip, QString port, QString path)
{

    QMap<QString,QVariant> web_server;
    web_server.insert("ip",ip);
    web_server.insert("port",port);

    QString usr_base64=getConfValue("login","user");
    QString pwd_base64=getConfValue("login","pwd");
    QString remember=getConfValue("login","remember");

    QMap<QString,QVariant> login;
    login.insert("user",usr_base64);
    login.insert("pwd",pwd_base64);
    login.insert("remember",remember);

    QMap<QString, QVariant> json;
    json.insert("web_server", web_server);
    json.insert("login", login);

    QJsonDocument jsonDocument = QJsonDocument::fromVariant(json);
    if ( jsonDocument.isNull() == true)
    {
        qDebug() << "QJsonDocument::fromVariant錯誤";
        return;
    }

    QFile file(CONF_FILE);
    if(!file.open(QFile::WriteOnly)!=0)
    {
            qDebug()<<"打開文件失敗";
            return;
    }

    file.write(jsonDocument.toJson());
    file.close();

    qDebug()<<"配置成功";
}

?

3. 登錄功能

?1.點擊登錄,獲取用戶名和密碼

2.驗證 用戶名 和密碼 格式的 合法性,如果 合法,則發(fā)送一個http請求給服務器:

POST http://119.23.41.13:80/login HTTP/1.1
Content-Type: application/json

{
    "pwd": "e10adc3949ba59abbe56e057f20f883e", //密碼,用md5進行加密
    "user": "zhangsan"                         //用戶名
}

http響應:

//登錄成功的響應
HTTP/1.1 200 OK

{
	"code":	"000",
	"token":	"86569b8a537abf45acbb811f0244a69e"
}

//登錄失敗的響應
HTTP/1.1 200 OK

{
	"code":	"001",
}

登錄成功后:

1.客戶端需要保存token,因為客戶端接下來訪問服務器 都需要 加上token來驗證身份

2.創(chuàng)建一個 logininfoinstance 實例對象,將 用戶名 ,token,服務器ip端口號保存到logininfoinstance方便后續(xù)進行讀取

3..需要?將用戶的?用戶名 和密碼?寫入到?cfg.json文件?中。為了防止泄密,需要對用戶名和密碼進行二次加密,先進行desc加密,然后再進行base64加密?

【QT 網(wǎng)絡云盤客戶端】——登錄界面功能的實現(xiàn),qt網(wǎng)絡云盤,服務器,運維

4.創(chuàng)建主界面,顯示主界面?

代碼實現(xiàn):?

//登錄按鈕
void Dialog::on_login_toolButton_clicked()
{
    qDebug()<<"登錄";
    //獲取賬號密碼
    QString account=ui->account_edit->text();
    QString password=ui->password_edit->text();

    //
    QRegExp reg(USER_REG);

    //校驗賬號的規(guī)則
    if(!reg.exactMatch(account))
    {
        //校驗失敗
        QMessageBox::warning(this,"警告","輸入的賬號格式有誤");
        return;
    }

    reg.setPattern(PASSWD_REG);

    if(!reg.exactMatch(password)){
        QMessageBox::warning(this,"警告","輸入的密碼格式有誤");
        return;
    }

    //封裝http請求
    QNetworkRequest request;
    //從配置文件中獲取到ip地址和port端口號

    QString ip=Common::getInstant()->getConfValue("web_server","ip");
    QString port=Common::getInstant()->getConfValue("web_server","port");
    QString url=QString("http://%1:%2/login").arg(ip).arg(port);//設置登錄的url
    request.setUrl(QUrl(url));

    //設置文件類型
    request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/json"));
    //將data數(shù)據(jù)以QJson的格式發(fā)送給服務器

    QJsonObject object;
    object.insert("user", account);
    object.insert("pwd",  m_common->getStrMd5(password));

    QJsonDocument doc(object);
    QByteArray data=doc.toJson();
    //發(fā)送數(shù)據(jù)
    QNetworkReply* rely=manger->post(request,data);
    connect(rely,&QNetworkReply::readyRead,this,[=]{
        //響應到達,讀取所有的數(shù)據(jù)
        QByteArray s=rely->readAll();
         qDebug() << "服務器返回數(shù)據(jù):" << QString(s);
         //將s數(shù)據(jù)轉換為Json對象
         QJsonParseError err;
         QJsonDocument document=QJsonDocument::fromJson(s,&err);

        if(err.error!=QJsonParseError::NoError){
            qDebug()<<"QJson格式錯誤";
            return;
        }
        //將QJson字符串轉換為QJson對象
        QJsonObject object1;
        object1=document.object();

        //獲取狀態(tài)碼
        QString value1=object1["code"].toString();
        if(value1=="000"){

            //登錄成功
            //0.獲取token,將用戶信息寫入到logininstant中。
            //1.判斷有沒有記住密碼,如果有記住密碼,獲取記住密碼的狀態(tài)
            //2.將賬號和密碼信息記錄到配置文件中
            //3.顯示登錄成功頁面(主頁面)

             //獲取token
            QString token=object1["token"].toString();
                qDebug()<<"token:"<<token;
            //獲取token,將用戶信息寫入到logininstant中。
            saveLoginInfoData(account,token,ip,port);


            // QMessageBox::information(this,"登錄成功","賬號登錄成功");
            //判斷有沒有記住密碼
            bool checkBox=ui->rember_checkBox->isChecked();
            if(checkBox==false)
            {
                //沒有記住密碼直接清除密碼框
                ui->password_edit->clear();
            }

            //將賬號密碼保存到配置文件中
            m_common->writeLoginInfo(account,password,checkBox);
            //獲取

           showMainWindow(account);
        }

        if(value1=="001"){
            QMessageBox::warning(this,"警告","登錄");
        }
    });
}

?
//common.h文件:
//將用戶信息 寫入到配置文件
void writeLoginInfo(QString user, QString pwd, bool isRemeber, QString path=CONF_FILE);

// 服務器信息寫入到配置文件
void writeWebInfo(QString ip, QString port, QString path=CONF_FILE);

?相關接口(接口實現(xiàn)自行跳轉項目鏈接去查看)?

4.讀取配置文件

  1. 當?shù)卿浗缑鎰?chuàng)建的時候,程序會先去讀取conf.json文件內容.將賬號密碼,服務器ip,端口號寫入到登錄界面中。
  2. 【QT 網(wǎng)絡云盤客戶端】——登錄界面功能的實現(xiàn),qt網(wǎng)絡云盤,服務器,運維【QT 網(wǎng)絡云盤客戶端】——登錄界面功能的實現(xiàn),qt網(wǎng)絡云盤,服務器,運維
  3. 由于賬號密碼在寫入配置文件是加密的,讀取賬號和密碼需要 先后進行 base64解密 desc解密,才顯示到登錄界面。
  4. desc加解密,需要在項目中添加des.c文件和des.h文件
//讀取配置文件信息,將賬號密碼,服務器端口號寫到界面中
 void Dialog::readConf()
 {
     QString user_base64=m_common->getConfValue("login","user");
     QString pwd_base64=m_common->getConfValue("login","pwd");
     QString remember=m_common->getConfValue("login","remember");

     //對賬號進行base64解密和desc解密
     QByteArray usr_des=QByteArray::fromBase64(user_base64.toLocal8Bit());
     unsigned char usr[1024]={0};
     int usr_len;
     //進行desc解密
     if(DesDec((unsigned char*)usr_des.data(),usr_des.length(),usr,&usr_len)!=0){
         qDebug()<<"desc解密失敗";
     }

     //賬號解密成功,將賬號顯示到登錄窗口
     QString s=QString::fromLocal8Bit((const char*)usr,usr_len);
     ui->account_edit->setText(s);

     if(remember=="yes")
     {
         ui->rember_checkBox->setCheckState(Qt::Checked);
         //記住密碼,將密碼顯示到密碼框上
         QByteArray pwd_des=QByteArray::fromBase64(pwd_base64.toLocal8Bit());
         unsigned char pwd[1024]={0};
         int pwd_len=0;
         //進行desc解密
         if(DesDec((unsigned char*)pwd_des.data(),pwd_des.length(),pwd,&pwd_len)!=0){
             qDebug()<<"密碼解密失敗";
         }

         //賬號解密成功,將賬號顯示到登錄窗口
         QString s1=QString::fromLocal8Bit((const char*)pwd,pwd_len);
         ui->password_edit->setText(s1);
     }


    //將ip地址和端口號顯示到服務器設置頁面
     QString ip=m_common->getConfValue("web_server","ip");
     QString port=m_common->getConfValue("web_server","port");

     ui->ip_edit->setText(ip);
     ui->port_eidt->setText(port);
 }

5.顯示主界面

登錄成功,顯示主頁面:

【QT 網(wǎng)絡云盤客戶端】——登錄界面功能的實現(xiàn),qt網(wǎng)絡云盤,服務器,運維

?


//創(chuàng)建主界面,并顯示主界面
void Dialog::showMainWindow(QString account)
{
    //獲取主頁面
    mainwindow=MainWindow::getinstant();
    mainwindow->setUser(account);//將用戶名顯示到主頁面上
    mainwindow->show();//顯示主頁面
    this->hide();//隱藏主頁面
   
    connect(mainwindow,&MainWindow::switchUser,this,[=](){
        mainwindow->hide();
        this->show();
    });
}

到了這里,關于【QT 網(wǎng)絡云盤客戶端】——登錄界面功能的實現(xiàn)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • redis 登錄客戶端命令

    Redis 命令用于在 redis 服務上執(zhí)行操作。 要在 redis 服務上執(zhí)行命令需要一個 redis 客戶端。Redis 客戶端在我們之前下載的的 redis 的安裝包中。 語法 Redis 客戶端的基本語法為: $ redis-cli 實例 以下實例講解了如何啟動 redis 客戶端: 啟動 redis 客戶端,打開終端并輸入命令 redis

    2023年04月08日
    瀏覽(85)
  • Windows后臺運行并啟動Frpc客戶端界面

    Windows后臺運行并啟動Frpc客戶端界面

    frp搭建內網(wǎng)穿透可以看我另外一篇 啟動frps服務端 3.1.先去下載NSSM服務。 地址:http://www.nssm.cc/download NSSM 是一個服務封裝程序,它可以將普通exe程序封裝成服務,使之像windows服務一樣運行。 我的是win64,找對應的系統(tǒng) 然后把nssm.exe這個文件放到frpc同一個目錄上 3.2.啟動nssm 先以管

    2024年02月06日
    瀏覽(21)
  • 【嵌入式Linux項目】基于Linux的全志H616開發(fā)板智能家居項目(語音控制、人臉識別、安卓APP和PC端QT客戶端遠程操控)有視頻功能展示

    【嵌入式Linux項目】基于Linux的全志H616開發(fā)板智能家居項目(語音控制、人臉識別、安卓APP和PC端QT客戶端遠程操控)有視頻功能展示

    目錄 一、功能需求 二、開發(fā)環(huán)境 1、硬件: 2、軟件: 3、引腳分配: 三、關鍵點 1、設計模式之工廠模式 2、線程 3、wiringPi庫下的相關硬件操作函數(shù)調用 4、語音模塊的串口通信 5、攝像頭的實時監(jiān)控和拍照功能 6、人臉識別 7、qt程序跨平臺運行(編譯成安卓APP) 四、編譯和

    2024年02月15日
    瀏覽(24)
  • QT實現(xiàn)客戶端斷開連接

    QT實現(xiàn)客戶端斷開連接

    Widget.cpp Widget.h main.cpp

    2024年04月14日
    瀏覽(29)
  • QT TCP客戶端實現(xiàn)

    QT TCP客戶端實現(xiàn)

    QTcpSocket實例首先是通過connectToHost()嘗試連接到服務器,需要指定服務器的IP地址和端口。connectToHost()是異步方式連接服務器,不會阻塞程序運行,連接后發(fā)射connected()信號。 如果需要使用阻塞方式連接服務器,則使用waitForConnected()函數(shù)阻塞程序運行,直到連接成功或失敗。

    2024年02月09日
    瀏覽(29)
  • QT客戶端開發(fā)的應用場景

    QT客戶端開發(fā)的應用場景

    QT 是一跨平臺應用程序開發(fā)框架,支持多種操作系統(tǒng),包括 Windows、macOS、Linux、Android、iOS 和嵌入式系統(tǒng)等。這使得 QT 非常適合開發(fā)需要在多種平臺上運行的應用程序。北京木奇移動技術有限公司,專業(yè)的軟件外包開發(fā)公司,歡迎交流合作。 QT 提供了一套完整的開發(fā)工具和

    2024年04月29日
    瀏覽(32)
  • Qt 8. UDP客戶端通信

    Qt 8. UDP客戶端通信

    1. 代碼 2. 效果 以上代碼可以實現(xiàn)UDP收發(fā)功能。

    2024年02月13日
    瀏覽(22)
  • QT充當客戶端模擬瀏覽器等第三方客戶端對https進行雙向驗證

    QT充當客戶端模擬瀏覽器等第三方客戶端對https進行雙向驗證

    在 ssl單向證書和雙向證書校驗測試及搭建流程 文章中,已經(jīng)做了基于https的單向認證和雙向認證,,, 在進行雙向認證時,采用的是curl工具或瀏覽器充當客戶端去驗證。 此次采用QT提供的接口去開發(fā)客戶端向服務器發(fā)送請求,來驗證https的雙向認證流程。 依然以 ssl單向證書

    2024年02月14日
    瀏覽(96)
  • 二、springboot集成CAS客戶端實現(xiàn)單點登錄

    pom中引入依賴 yml中添加cas配置 讀取CAS相關配置 cas配置類 單點登錄接口demo 訪問loingCas接口時,若未在CASserver登錄,則會被攔截跳轉到CAS的登陸頁面,登陸成功后放行繼續(xù)訪問loginCas接口

    2024年02月15日
    瀏覽(23)
  • QT實現(xiàn)tcp服務器客戶端

    QT實現(xiàn)tcp服務器客戶端

    2024年02月07日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包