qt深入解析

肆空界發表於2024-10-13

1.Qt IO

裝置型別:

  • 順序儲存裝置:如網路卡。。
  • 隨機儲存裝置:如.txt..

Qt中IO裝置繼承圖

Qt中的檔案系統

通用開發庫,跨平臺

QIODevice IO父類,提供位元組塊讀寫通用操作和基本介面

QFileDevice提供檔案操作通用實現

QFile訪問本地檔案或嵌入資源

QTemporayFile建立和訪問本地系統的臨時檔案

QBuffer讀寫QbyteArray,記憶體檔案

QProcess執行外部程式,處理程序間通訊

QAbstractSocket所有套接字類的父類

QTcpSocket TCP協議網路資料傳輸

QUdpSocket 傳輸UDP報文

QSslSocket 使用SSL/TSL傳輸資料

同步IO/非同步IO

非同步IO也就是重疊(overlap)IO

QIODevice

QIODevice是抽象的,不能被例項化,提供抽象介面

QIODevice是區分兩種裝置的:隨機訪問裝置,順序裝置

隨機訪問裝置:支援透過()查詢任意位置。檔案當前位置透過pos()獲取。例:QFile,QBuffer

順序裝置:不支援尋找任意位置。資料必須在一次傳遞中獲取。pos()和size()不適用於順序裝置。例:QTcpSocket,QProcess

可以使用isSequential()來確定裝置型別

資料可用時,QIODevice發出readyRead()。可以使用bytesAvailable()確定可供閱讀的位元組數。

QIODevice向裝置寫入資料fwrite時會發出bytesWritten()訊號。使用bytesToWrite()來確定等待寫入的當前資料大小。

QIODevice某些子類是非同步的,如QTcpSocket,QProcess,諸如write()和read()之類的輸入輸出函式總是立即返回的。

QIODevice提供了一些功能,允許您立即執行這些操作,同事阻塞呼叫執行緒,而不需要進入時間迴圈。

waitForReadyRead() 在呼叫執行緒中暫停操作,知道新的資料可用來讀取

waitForBytesWritten() 在呼叫執行緒中掛起操作,直到將資料的一個有效負載寫入到裝置

waiFor....() QIODevice的子類實現特定於裝置的操作的阻塞函式

QDir

獲取當前目錄

[static] QString QDir::currentPath() //取得當前專案所在的目錄

[static] QString QCoreApplication::applicationDirPath() //取得exe檔案(在windows系統中)所在的目錄

切換到當前檔案父目錄

bool QDir::cdUp()

absolutePath()獲取絕對路徑

得到所有檔案資訊

QStringList:: QDir::entryList()//返回該目錄下所有檔案及資料夾名字的列表

QFileInfoList QDir::entryInfoList()//返回該目錄下所有檔案和資料夾資訊的列表

QDir mDir("D:/qttest")

mDir.exits();//檔案是否存在

mDir.absolutePath("a.txt")//返回指定目錄下指定檔案的絕對路徑

mDir.dirName();//剝離掉路徑,只返回目錄的名字

QFile

bool QFile::open(OpenMode mode)

引數:決定檔案以何種方式開啟

QIODevice::ReadOnly,WriteOnly(只寫,開啟時原內容清空,檔案不存在則建立),ReadWrite,Append,Truncate(重寫方式開啟,檔案原有內容全部清空),Text(文字方式開啟'\n'翻譯為換行符,寫入時,將行結束符轉換成本地格式)

close();//關閉檔案

read();//讀檔案,引數為讀取的長度大小(必填)fread

readLine();//讀取一行

readAll();//讀取所有

write();//向檔案中寫入資料

atEnd();//判斷是否到達檔案尾

seek();//將檔案指標定位到指定位置處

pos();//獲取檔案指標當前位置

bool QFile::copy(const QString &newName)//檔案複製

bool exits() const;//檔案是否存在

bool link(const QString &linkName)//建立連線(快捷方式)

bool remove()//刪除一個檔案

bool rename(const QString &newName)//重新命名

void setFileName(const QString &name) //設定檔名

//靜態成員

bool copy(const QString &fileName, const QString &newName)

bool setPermissions(const QString &fileName, Permission permissions)

Permissions permissions(const QString &fileName)

使用流程:

1.QFile建立一個檔案物件

2.open()開啟這個檔案

3.可以使用QFileInfo獲取有關該檔案的資訊

或者進行讀寫操作

QFileInfo有很多函式:

isDir();

isExecutable()//是否是可執行檔案

baseName()//直接獲得檔名

completeBaseName()//獲取完整檔名

suffix()//直接獲取檔案字尾名

completeSuffix()//獲取完整的檔案字尾

相關文章