QT聊天項目DAY06

1.從git上同步項目

編譯測試,編譯通過

Post請求測試

測試成功

2. email is 打印有問題,檢查

解析結果是存儲在jsonResult中的,修改

3. 客戶端實現Post驗證碼請求

3.1 同步Qt客戶端項目

檢查QT版本,由于我在公司用的還是QT5.12.9,現在下一版5.14.2

https://download.qt.io/archive/qt/5.14/

選擇一下安裝目錄

選擇編譯器版本,不適用MingW因為打包容易產生庫的依賴缺失問題

3.2 配置系統環境

1. 右擊此電腦

2. 新增VSQT擴展編輯器版本

3. 編譯測試

圖片丟失,檢查

但是用QT5.12.9 就沒有問題

可能是安裝的時候缺失了什么吧

添加QTDesigner打開UI界面,看看是哪里出問題了

檢查了一遍UI發現沒有任何問題,重新編譯查看,一切正常

VS必須要自己配置打開UI的啟動器喔,如果不自己配置的話,容易打不開UI界面還可能只能打開代碼界面,或者一打開UI就閃退,配置.ui文件的打開方式,上面以及介紹了喔

3.3 開始實現Post請求,然后獲取服務器發來的驗證碼

如果郵箱格式正確就發送Http請求

/* 獲取驗證碼 */
void RegisterWidget::OnGetCodeButtonClicked()
{QString Email = ui.Email_Edit->text();// 設置正則表達式QRegularExpression Regex(R"(^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$)");bool Match = Regex.match(Email).hasMatch();/* 如果郵箱格式正確 */ if (Match){// 發送Http驗證碼QJsonObject jsonHttpCode;jsonHttpCode.insert("email", Email);HttpManager::Instance()->PostHttpReq(QUrl("http://localhsot:8080//getVarifycode"),jsonHttpCode,ReqID::ID_GET_VARIFY_CODE,Modules::REGISTERMOD);}else{ShowTipLabel(QString::fromLocal8Bit("郵箱格式不正確"), "error");}
}

報錯了,QNetworkReply::UnknownServerError,拼寫錯誤,是host不是hsot

一切正確

4. Post請求的整體梳理

4.1 當獲取驗證碼按鈕點擊時

觸發該按鈕對應的回調函數,在回調里會先獲取郵箱文本,如果郵箱格式正確,會設置要發送的請求,即設置json

4.2 Http管理請求的對象發送該請求

1. 就是之前說過的,當服務器監聽8080端口號時發現有客戶端發來連接時,會分配一個socket套接字來管理該鏈接,然后繼續監聽8080端口;

這里對應的就是客戶端發來連接請求,還有對應的請求體request

QNetworkReply* reply = m_pNetworkAccessManager->post(request, data);						
// 發送請求返回一個管理該連接的對象,如果服務器為該連接分配了套接字

2. 服務器會檢查是否是Post請求

至于如何解析Post請求的在前面的文章說過了,這里不再贅述,如果客戶端發來的json中有email這個key,說明解析成功了,然后回送響應

3. 客戶端解析服務器發來的響應

這里只是將服務器回送的響應從客戶端的接受緩沖區中全部讀出來,并填充到QString中了

具體的解析行為還是在注冊窗口里,解耦了,看課的代碼很多自己都記不下來,沒關系,重要的是掌握思想和整體脈絡,只要熟悉一遍了,自己再去搭服務器框架的時候,再猜猜坑,有些代碼背不住直接問AI讓他幫你生成就可以了

在獲取驗證碼的回調函數中,會檢查該回應是否成功

這個error key 是在服務器中添加到響應中的_response["error"]? = 0,這里修改一下魔法數字

最后就是獲取服務器響應報文中的email

至此整個客戶端向服務器發送Post請求的一整套邏輯已經跑了一遍,老實說,這套代碼讓我再敲一遍,我也敲不出來這么完整的框架出來,這也說明了彎路才是捷徑

5. 用Config文件來管理客戶端的參數

1. 新建Confin.ini,并添加現有項到自己的解決方案中

2. 填充Config.ini

[GateServer]
host=localhost
port=8080
target=getVarifycode

3. 讀取Config.ini?

根據我的開發經驗來說

一般直接用QDir::CurrPath + Config/Config.ini

或者“./Config/Config.ini”

目前來說沒出現過報錯

#ifndef GLOBAL_H
#define GLOBAL_H
#include <QWidget>
#include <functional>
#include <QRegularExpression>
#include "QStyle"#include <memory>
#include <iostream>
#include <mutex>#include <QString>// extern 聲明此變量是在其他文件中定義的全局變量
extern std::function<void(QWidget*)> repolish;extern QString ConfigPath;								// 配置文件路徑#endif // GLOBAL_H
#include "Global.h"#include <QDir>// 初始化聲明的全局變量
std::function<void(QWidget*)> repolish = [](QWidget* Widget)
{Widget->style()->unpolish(Widget);Widget->style()->polish(Widget);
};// 配置文件路徑
QString ConfigPath = QDir::currentPath() + "/Config/Config.ini";

4. 用QSetting來管理這個config.ini

5. 重新定義創建URL的方式為讀取config的方式,來拼接URL

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76522.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76522.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76522.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PHP騰訊云人臉核身獲取FaceId

參考騰訊云官方文檔&#xff1a; 人臉核身 合作方后臺上傳身份信息_騰訊云 前提&#xff1a;已經獲取了SIGN Ticket。獲取參考文檔&#xff1a; PHP騰訊云人臉核身獲取SIGN Ticket-CSDN博客 public function getTxFaceId($uid,$name,$idNo){$appId ;$userId $uid;$nonce …

用 Deepseek 寫的uniapp油耗計算器

下面是一個基于 Uniapp 的油耗計算器實現&#xff0c;包含 Vue 組件和頁面代碼。 1. 創建頁面文件 在 pages 目錄下創建 fuel-calculator 頁面&#xff1a; <!-- pages/fuel-calculator/fuel-calculator.vue --> <template><view class"container"…

Redis ④-通用命令

Redis 是一個 客戶端-服務器 結構的程序&#xff0c;這與 MySQL 是類似的&#xff0c;這點需要牢記&#xff01;&#xff01;&#xff01; Redis 固然好&#xff0c;但也不是任何場景都適合使用 Redis&#xff0c;一定要根據當前的業務需求來選擇是否使用 Redis Redis 通用命令…

HarmonyOs學習 環境配置后 實驗1:創建項目Hello World

HarmonyOS開發入門&#xff1a;環境配置與Hello World實驗 實驗目標 掌握HarmonyOS開發環境配置&#xff0c;創建首個HarmonyOS應用并實現"Hello World"界面展示 實驗準備 已安裝DevEco Studio開發環境已配置HarmonyOS開發依賴項熟悉基本TypeScript/ArkTS語法&am…

HTTP:十.cookie機制

Cookie概念及類型 HTTP cookie,簡稱cookie,又稱數碼存根、“網站/瀏覽+魔餅/魔片”等,是瀏覽網站時由網絡服務器創建并由網頁瀏覽器存放在用戶計算機或其他設備的小文本文件。Cookie使Web服務器能在用戶的設備存儲狀態信息(如添加到在線商店購物車中的商品)或跟蹤用戶…

記錄小程序第一次調用Api,基于騰訊云Serverless函數,實現小程序的成功接入api,以及數據調用

目錄 創建騰訊云個人賬戶新建severless應用建立函數URL小程序中調用api示例 創建騰訊云個人賬戶 百度搜索即可&#xff0c;并注冊 新建severless應用 作者以github下載的某Api為例&#xff0c;這里不展示具體Api&#xff0c;只關注操作即可&#xff0c;相信都是互通的 在騰…

ES6 第一講 變量定義 堆與棧 字符串的擴展和數值型的擴展

文章目錄 1.ES6變量定義2.ES6堆和棧3.字符串的擴展3.1 模板字符串3.2 判斷是否以指定的字符串開頭或結尾3.3 字符串重復輸出3.4 填充方法3.5 去除前后字符串空格3.6 返回參數指定位置的字符 4. 數值型的擴展4.1 二進制0B 八進制0O4.2 判斷是否是一個無窮大的數字 &#xff08;判…

LeetCode第158題_用Read4讀取N個字符 II

LeetCode 第158題&#xff1a;用Read4讀取N個字符 II 題目描述 給你一個文件&#xff0c;并且該文件只能通過給定的 read4 方法來讀取&#xff0c;請實現一個方法來讀取 n 個字符。 read4 方法&#xff1a; API read4 可以從文件中讀取 4 個連續的字符&#xff0c;并且將它…

算法篇之單調棧

單調棧算法入門 單調棧是一種特殊的數據結構應用&#xff0c;它的核心在于維護一個棧&#xff0c;使得棧內元素保持單調遞增或者單調遞減的順序。這種數據結構在解決很多算法問題時非常有效&#xff0c;例如求數組中每個元素的下一個更大元素、每日溫度問題等。 一、單調棧的…

Kubernetes控制平面組件:調度器Scheduler(二)

云原生學習路線導航頁&#xff08;持續更新中&#xff09; kubernetes學習系列快捷鏈接 Kubernetes架構原則和對象設計&#xff08;一&#xff09;Kubernetes架構原則和對象設計&#xff08;二&#xff09;Kubernetes架構原則和對象設計&#xff08;三&#xff09;Kubernetes控…

【網絡】數據鏈路層知識梳理

全是通俗易懂的講解&#xff0c;如果你本節之前的知識都掌握清楚&#xff0c;那就速速來看我的筆記吧~ 自己寫自己的八股&#xff01;讓未來的自己看懂&#xff01; &#xff08;全文手敲&#xff0c;受益良多&#xff09; 數據鏈路層 我們來重新理解一下這個圖&#xff1a;…

機器學習(神經網絡基礎篇)——個人理解篇6(概念+代碼)

1 在聲明一個類中&#xff0c;構建一個屬于類的函數&#xff0c;前面為什要加上“self”&#xff1f; 就像下面這一串代碼&#xff1a; class TwoLayerNet:def __init__(self, input_size, hidden_size, output_size,weight_init_std0.01):# 初始化權重self.params {}self.p…

Cribl 對Windows-xml log 進行 -Removing filed-06

Removing Fields Description? The Eval Function can be used to add or remove fields. In this example we will remove the extracted fields while preserving _raw, _time,index,source, sourcetype. Steps - Adding an Eval Function

chili3d調試6 添加左側面板

注釋前 一個一個注釋看對應哪個窗口 無事發生 子方法不是顯示的窗口 注釋掉看看 沒了 注釋這個看看 零件頁面沒了 這個瀏覽器居然完全不用關的&#xff0c;刷新就重載了 注釋看看 無工具欄版本 sidebar&#xff1a; 往框框里面加入 div({ className: style.input }, user_…

Linux學習——了解和熟悉Linux系統的遠程終端登錄

Linux學習——了解和熟悉Linux系統的遠程終端登錄 一.配置Ubuntu系統的網絡和用戶 1、設置虛擬機網絡為橋接模式 打開VMWare&#xff0c;選擇編輯虛擬機設置&#xff0c;在網絡適配器設置中&#xff0c;選擇“橋接模式”&#xff0c;保存設置并啟動Ubuntu。 2、配置Ubuntu的…

【JAVA EE初階】多線程(1)

這樣的代碼&#xff0c;雖然也能打印hello thread&#xff0c;但是沒有創建新的線程&#xff0c;而是直接在main方法所在的主線程中執行了run的邏輯 start方法&#xff0c;是調用系統api&#xff0c;真正在操作系統內部創建一個線程。這個新的線程會以run作為入口方法&#xff…

javase 學習

一、Java 三大版本 javaSE 標準版 &#xff08;桌面程序&#xff1b; 控制臺開發&#xff09; javaME 嵌入式開發&#xff08;手機、小家電&#xff09;基本不用&#xff0c;已經淘汰了 javaEE E業級發開&#xff08;web端、 服務器開發&#xff09; 二、Jdk ,jre jvm 三…

【Linux】Linux 操作系統 - 05 , 軟件包管理器和 vim 編輯器的使用 !

文章目錄 前言一、軟件包管理器1 . 軟件安裝2 . 包管理器3 . Linux 生態 二、軟件安裝 、卸載三、vim 的使用1 . 什么是 vim ?2 . vim 多模式3 . 命令模式 - 命令4 . 底行模式 - 命令5. 插入模式6 . 替換模式7 . V-BLOCK 模式8 . 技巧補充 總結 前言 本篇筆者將會對軟件包管理…

python基礎知識點(1)

python語句 一行寫一條語句 一行內寫多行語句&#xff0c;使用分號分隔建議每行寫一句&#xff0c;且結束時不寫分號寫在[ ]、{ }內的跨行語句&#xff0c;被視為一行語句\ 是續行符,實現分行書寫功能 反斜杠表示下一行和本行是同一行 代碼塊與縮進 代碼塊復合語句&#xf…

C#/.NET/.NET Core技術前沿周刊 | 第 35 期(2025年4.14-4.20)

前言 C#/.NET/.NET Core技術前沿周刊&#xff0c;你的每周技術指南針&#xff01;記錄、追蹤C#/.NET/.NET Core領域、生態的每周最新、最實用、最有價值的技術文章、社區動態、優質項目和學習資源等。讓你時刻站在技術前沿&#xff0c;助力技術成長與視野拓寬。 歡迎投稿、推薦…