自己的第乙個程式 QT聊天軟體 小感

2021-06-16 05:08:20 字數 1716 閱讀 6549

其實當初師兄給我這個任務的時候還是在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 文字 ...