環境:windows xp + qt 4.8.5+qtcreator 2.8.0
一、修改介面
我們刪除了textbrowser
,加入了幾個label
,line edit
,push button
部件,乙個tree widge
t及乙個progress bar
部件。然後我們對其中幾個部件做如下更改。
(1)將「ftp伺服器」標籤後的line edit
的objectname
屬性改為ftpserverlineedit
,其text
屬性改為ftp.qt-project.org
。
(2)將「使用者名稱」標籤後的line edit
的objectname
屬性改為usernamelineedit
,其text
屬性改為anonymous
,將其tooltip
屬性改為「預設使用者名稱請使用:anonymous ,此時密碼任意。」
(3)將「密碼」標籤後的line edit
的objectname
屬性改為passwordlineedit
,其text
屬性改為123456
,將其echomode
屬性改為password
。
(4)將「連線」按鈕的objectname
屬性改為connectbutton
。
(5)將「返回上一級目錄」按鈕的objectname
屬性改為cdtoparentbutton
。
(7)將tree widget
的objectname
屬性改為filelist
,然後在tree widget
部件上單擊滑鼠右鍵,選擇edit items
選單,新增列屬性如下。
最終介面如圖所示:
二、功能實現
1.更改widget.h
檔案。
(1)新增標頭檔案#include
(2)在private
中新增變數:
qhashbool> isdirectory; //用來儲存乙個路徑是否為目錄的資訊
qstring currentpath; //用來儲存現在的路徑
qfile *file;
(3)新增槽:
private slots:
void
on_downloadbutton_clicked();
void
on_cdtoparentbutton_clicked();
void
on_connectbutton_clicked();
void
ftpcommandfinished
(int,bool)
;void
ftpcommandstarted
(int)
;void
updatedatatransferprogress
(qint64,qint64 )
;//更新進度條
//將伺服器上的檔案新增到tree widget中
void
addtolist
(const qurlinfo &urlinfo)
;void
processitem
(qtreewidgetitem*,int)
;//雙擊乙個目錄時顯示其內容
2.更改widget.cpp
的內容。
(1)實現「連線」按鈕的單擊事件槽。
void widget::on_connectbutton_clicked() //連線按鈕
我們在「連線」按鈕的單擊事件槽函式中新建了ftp
物件,然後關聯了相關的訊號和槽。這裡的listinfo()
訊號由ftp->list()
函式發射,它將在登入命令完成時呼叫,下面我們提到。而datatransferprogress()
訊號在資料傳輸時自動發射。最後我們從介面上獲得伺服器位址,使用者名稱和密碼等資訊,並以它們為引數執行連線和登入命令。
(2)更改ftpcommandfinished()
函式。
我們在相應位置做更改。
首先,在登入命令完成時,我們呼叫list()函式:
ui->label->settext(tr("登入成功"));
ftp->list(); //發射listinfo()訊號,顯示檔案列表
ui->downloadbutton->setenabled(true);
file->close();
delete file;
最後再新增乙個if
語句,處理list
命令完成時的情況:
if (ftp->currentcommand() == qftp::list)
}
我們在list
命令完成時,判斷檔案列表是否為空,如果為空,就讓tree widget
不可用,並顯示「empty」條目。
(3)新增檔案列表函式的內容如下。
void widget::addtolist(const qurlinfo &urlinfo) //新增檔案列表
}
當ftp->list()
函式執行時會發射listinfo()
訊號,此時就會執行addtolist()
函式,在這裡我們將檔案資訊顯示在tree widget
上,並在isdirectory
中儲存該檔案的路徑及其是否為目錄的資訊。為了使檔案與目錄進行區分,我們使用了不同的圖示file.png
和dir.png
來表示它們,這兩個圖示放在了工程資料夾中。
(4)將建構函式的內容更改如下。
這裡我們只是讓進度條的值為0,然後關聯了tree widget
的乙個訊號itemactivated()
。當滑鼠雙擊乙個條目時,發射該訊號,我們在槽函式中判斷該條目是否為目錄,如果是則進入該目錄。
(5)processitem()
函式的實現如下。
void widget::processitem(qtreewidgetitem* item,int) //開啟乙個目錄
}
(6)「返回上一級目錄」按鈕的單擊事件槽函式如下。
void widget::on_cdtoparentbutton_clicked() //返回上級目錄按鈕
else
ftp->list();
}
在返回上一級目錄時,我們取當前路徑的最後乙個/
之前的部分,如果此時路徑為空了,我們就讓「返回上一級目錄」按鈕不可用。
ui->downloadbutton->setenabled(false); ftp->get(ui->filelist->currentitem()->text(0), file);}
(8)更新進度條函式內容如下。
void widget::updatedatatransferprogress( //進度條
qint64 readbytes,qint64 totalbytes)
3.流程說明。
對於ftp
的操作,全部由那些命令和訊號來完成,我們只需要呼叫相應的命令,並在其發出訊號時,進行對應的處理就可以了。而對於檔案的顯示,則是檢視部分的知識了。
4.執行程式,效果如下圖所示。
ftp->abort()
函式。你也可以參考qt自帶的ftp example例子。對於其他操作,比如上傳等,你可以根據需要新增。
ftp的相關程式設計就講到到這裡。
QT學習筆記之QT網路程式設計
tcp 傳輸控制協議,提供的是面向連線 可靠的位元組流服務。當客戶和伺服器彼此交換資料前,必須先在雙方之間建立乙個tcp連線,之後才能傳輸資料。tcp提供超時重發,丟棄重複資料,檢驗資料,流量控制等功能,保證資料能從一端傳到另一端。udp 使用者資料報協議,是乙個簡單的面向資料報的運輸層協議。udp...
網路安全 之 FTP,溢位攻擊
反正不管什麼,首先就要全部掃瞄 searchspolit,這個工具儲存了所有軟體不同版本的漏洞。就像乙個資料庫,儲存了所有版本軟體的漏洞。matasolit,遠端溢位工具 相當於找落後軟體的漏洞,因此最好更新到最新版本即可。利用緩衝區溢位攻擊,可以導致程式執行失敗 系統關機 重新啟動等後果。緩衝區溢...
大話QT之十 實現FTP斷點續傳
應用需求 且這三種傳輸資料方式是可配的,能夠通過不同的介面呼叫。相比這三種方式。基於udt的大量檔案傳輸是比較值得研究與創新的地方,它在底層是基於udp,在上層實現了可靠性的控制 同一時候它充分考慮到了基於在公網環境下基於tcp進行傳輸時擁塞控制演算法的缺點,實現了自己的擁塞控制演算法,在實際測試中...