其實當初師兄給我這個任務的時候還是在2023年的11月份。那個時候剛到專案上的我超級自信,總認為只要自己想做,稍微看下書,動下手就可以寫出來了。所以當師兄問我多久可以做好的時候,我開始滿懷信心的說乙個星期,後來細想下有點懸,說還是2個星期吧。於是還很慎重的寫了每天的工作任務計畫。
聊天軟體的功能需求:
1.實現乙個客戶端,乙個伺服器端
客戶端單擊列表特定的乙個條目,會彈出乙個對話方塊;
客戶端在對話方塊中輸入訊息,會通過伺服器**到這個對應的客戶端那邊。
3.伺服器端啟動的時候讀取配置檔案,監聽某個繫結的埠;
接受伺服器的各種請求資訊,儲存它的基本登入資訊;
接收客戶端的資訊並給指定的客戶端進行**。
直到下來才發現,自己要做乙個類qq的聊天軟體太難了,很多東西要學~ 自己很多的重複設計和工作真的是。。。。我回憶著列下:
1.剛開始的時候對qt很有牴觸,總想用自己熟悉點的c語言寫,於是就在用unix上面的網路程式設計程式進行實現,後來伺服器寫的差不多了,要寫客戶端的時候,發現介面的實現根本就離不開qt。而且關於伺服器端對客戶端資訊的儲存和解析c語言實現的話太過於繁瑣,幾乎每個功能都要我自己實現。工程量浩大。
2.後來準備用c語言+qt完成這個軟體,但是發現因為2個很多的資料型別都不通用,所有很多地方要進行不必要的甚至是重複的型別轉化。
3.第一次寫這麼大的乙個軟體,最終我還是決定使用封裝性比較好的qt,加上這個也是專案上的主語言,剛好是乙個很好的學習機會。
我的類qq軟體的設計:
傳輸協議的設計:
enum messagetype; 各種協議頭
在傳送出去的資料流裡面包含的資訊
傳送的總的位元組長度+檔案頭+這種資訊型別傳送的內容
客戶端的
1.幾個大類:
login:qt類,用來實現登入視窗,並在其中獲取使用者名稱
buddy:qt類,用來實現客戶端的列表呈現
其中的兩個方法:insertitem() //用於在列表中新增使用者條目資訊
itemclick() //用於找出特定的使用者,並儲存其資訊進行通訊
chat:qt類,用來實現對話視窗
client1:(因為不斷的重複寫,最終竟然把它命名為這個了。。真慚愧)
用來定義客戶端使用者的基本資訊,以及呼叫其他的幾個類
2 .最要注意的是qmap容器來儲存我的使用者資訊列表,和對話視窗編號,這對於資訊的正常傳輸很重要
qmap infobuddy; // id and name of the buddy
qmap pairlist;
伺服器端:
根據設計的傳輸協議對客戶端的數劇進行接收,同時要保證每個客戶端有自己乙個對應的socket不會重複
伺服器端每接收到乙個新的連線,就會產生乙個新的socket並給使用者儲存起來供其以後專用。
要說各種細節,真的是太多了。想想整個過程,我竟然被折磨了快2個月之久,但是嘿嘿 當然也不是純做它了,還要耍的嘛,不過真的在其中學到了很多,關於c++的結構設計啊,物件的使用啊,還有我學習qt類的使用啊 真的都熟練了很多,現在也才理解了什麼叫做大家常說的「瓶頸」,就是到了那個時候撞破腦袋也難出來的東西。。。。。
總之,還好是乙個好的開始,在想著如果這個東西寫不完,我都不好意思回家過年了。哈哈~ 只是這個過程中當然還是要感謝一直幫助引導我的師兄(其實他後來都對我無語了),後面呢,也希望自己能夠繼續對它進行完善:
連線資料庫;或者用epoll;還有多執行緒實現的 都有~ 一步步來吧 哈哈 就到這吧~~~
第乙個QT程式
建立了乙個有介面的qt widget 程式,如圖,雖然簡單,但有幾點需要主要注意的地方 1 第8行,一定要 include mainwindow.h 否則提示 mainwindow was not declared in this scope 2 第8行,若寫為mainwindow w 則執行結果為...
QT的第乙個程式
一 qt簡介 qtcreator qt工程 qt的第乙個程式,類,元件 二 訊號與槽 三 對話方塊 四 qt desiner 控制項 布局 樣式 五 事件 六 gui繪圖 七 檔案 八 網路程式設計 九 執行緒 十 資料庫 十一 qml 十二 專案 qt的特性 圖形介面開發 相容js 1.跨平台 c...
第乙個小程式
2.建立pages目錄檔案 作用是放各個頁面的 3.建立頁面 給頁面起名字,並建立四個檔案 1 js 邏輯的實現 2 json 負責標題欄和一些狀態列 3 wxml 頁面文字 4 wxss 頁面樣式 4.把內容元素封裝在view內部,寫法 內容 5.這節課需要用到三個元件 文字 按鈕 1 2 文字 ...