QT開發(二十八)——QT經常使用類(二)

QT開發(二十八)——QT經常使用類(二)

1、QDir

1QDir簡介

    QDir提供對目錄結構及其內容的訪問。html

    QDir經過相對或絕對路徑指向一個文件。網絡

2QDir成員函數

QDir主要成員函數以下:異步

QDir::QDir ( const QDir & dir )ide

QDir::QDir ( const QString & path = QString() )函數

Dir::QDir ( const QString & path, const QString & nameFilter, SortFlags sort = SortFlags( Name | IgnoreCase ),Filters filters = AllEntries )ui

構造函數編碼

QString QDir::absoluteFilePath ( const QString & fileName ) constspa

返回目錄中文件的絕對路徑操作系統

QString QDir::absolutePath () constrest

返回絕對路徑,不包括.和..

bool QDir::cd ( const QString & dirName )

切換到目錄

uint QDir::count () const

返回目錄中文件和目錄的數量

QDir QDir::current () [static]

返回應用程序的當前目錄

QString QDir::currentPath () [static]

返回應用程序當前目錄的絕對路徑

QFileInfoList QDir::entryInfoList(const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const

QFileInfoList QDir::entryInfoList(Filters filters = NoFilter, SortFlags sort = NoSort) const

返回目錄中全部文件與目錄的QFileInfo對象鏈表

QStringList QDir::entryList(const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const

QStringList QDir::entryList(Filters filters = NoFilter, 

 SortFlags sort = NoSort) const

返回目錄中全部文件與目錄的名字的鏈表

bool QDir::exists(const QString & name) const

若是name文件存在返回true

bool QDir::exists() const

若是目錄存在,返回true

bool QDir::isAbsolute() const

若是目錄路徑是絕對路徑,返回true

bool QDir::isAbsolutePath(const QString & path) [static]

若是路徑path是絕對路徑,返回true

bool QDir::makeAbsolute()

將目錄路徑轉化爲絕對路徑

bool QDir::mkdir(const QString & dirName) const

建立一個dirNanme的子目錄

bool QDir::mkpath(const QString & dirPath) const

建立dirPath目錄路徑

void QDir::setSorting(SortFlags sort)

設置排序方式

void QDir::setFilter(Filters filters)

設置過濾器

bool QDir::setCurrent(const QString & path) [static]

path設置爲應用程序的當前工做目錄

bool QDir::remove(const QString & fileName)

刪除文件fileName

bool QDir::rename(const QString & oldName, const QString & newName)

將文件或目錄oldName重命名爲newName

bool QDir::rmdir(const QString & dirName) const

刪除指定目錄dirName

bool QDir::rmpath(const QString & dirPath) const

刪除指定目錄路徑dirPath

2、QFile

1QFile簡介

QFile提供了讀寫文件的接口,是讀寫文本文件、二進制文件、資源文件的I/O設備。

QT4版本的QIODevice類圖以下:

wKioL1hCWTzDiTz4AAAxMdU8dmI689.png

    QT5版本的QIODevice類圖以下:

wKioL1hCWVnxhMBaAAA1F011sRs615.png

各個類的用途以下:

    QIODevice:全部 I/O 設備類的基類,提供了字節塊讀寫的通用操做以及基本接口;

    QFlie:訪問本地文件或者嵌入資源;

    QTemporaryFile:建立和訪問本地文件系統的臨時文件;

    QBuffer:讀寫 QByteArray;

    QProcess:運行外部程序,處理進程間通信;

    QAbstractSocket:全部套接字類的父類;

    QTcpSocket:TCP 協議網絡數據傳輸;

    QUdpSocket:傳輸 UDP 報文;

    QSslSocket:使用 SSL/TLS 傳輸數據;

    QFileDevice:Qt5 新增長的類,提供了有關文件操做的通用實現。

    QProcess、QTcpSocket、QUdpSoctet和QSslSocket是順序訪問設備QFile、QTemporaryFile和QBuffer是隨機訪問設備QFile提供了從文件中讀取和寫入數據的能力QFile主要提供了有關文件的各類操做,好比打開文件、關閉文件、刷新文件等有關文件自己的信息,好比文件名、文件所在目錄的名字等,則是經過 QFileInfo 獲取

2QFile成員函數

QFile主要成員函數以下:

QFile::QFile ( const QString & name )

QFile::QFile ( QObject * parent )

QFile::QFile ( const QString & name, QObject * parent )

構造函數

bool QFile::open ( OpenMode mode ) [virtual]

bool QFile::open ( FILE * fh, OpenMode mode )

bool QFile::open ( int fd, OpenMode mode )

打開文件

qint64 QFile::readData(char * data, qint64 len)[virtual protected]

qint64 QFile::readLineData(char * data, qint64 maxlen)[virtual protected]

讀取數據

qint64 QFile::writeData(const char * data, qint64 len)[virtual protected]

寫入數據

void QFile::close () [virtual]

關閉文件

bool QFile::copy(const QString & newName)

拷貝當前文件到newName文件

bool QFile::copy(const QString & fileName,const QString & newName)[static]

拷貝fileName文件到newName文件

bool QFile::exists ( const QString & fileName ) [static]

bool QFile::exists () const

文件是否存在

bool QFile::atEnd () const [virtual]

若是到達文件結束,返回true

QString QFile::fileName () const

返回文件名

bool QFile::remove ()

bool QFile::remove ( const QString & fileName ) [static]

刪除文件

bool QFile::rename ( const QString & newName )

bool QFile::rename(const QString & oldName, const QString & newName)[static]

重命名文件

void QFile::setFileName ( const QString & name )

設置文件名

void QFile::setDecodingFunction ( DecoderFn function ) [static]

設置解碼函數

void QFile::setEncodingFunction ( EncoderFn function ) [static]

 設置編碼函數

1、QFileInfo

一、QFileInfo簡介

QFileInfo提供了獨立與系統的文件信息。

QFileInfo提供了文件系統中文件的名字與路徑、訪問權限和是不是目錄或符號連接的信息。

2QFileInfo成員函數

QDir QFileInfo::absoluteDir() const

返回文件的絕對路徑

QString QFileInfo::absoluteFilePath() const

返回包含文件名的文件的絕對路徑

QString QFileInfo::absolutePath() const

返回不包含文件名的文件的絕對路徑

QString QFileInfo::baseName() const

返回不帶路徑的文件的基本名字,不帶任何文件後綴

QString QFileInfo::completeBaseName() const

返回不帶路徑的文件的完整基本名字,不帶最後一個後綴

QString QFileInfo::completeSuffix() const

返回文件的完整後綴

QDateTime QFileInfo::created() const

返回建立文件的日期和時間

QDir QFileInfo::dir() const

返回對象的父目錄的路徑

QString QFileInfo::fileName() const

返回文件名,不包含路徑

QString QFileInfo::filePath() const

返回包含路徑的文件名

QString QFileInfo::path() const

返回不包括文件名的文件路徑

qint64 QFileInfo::size() const

返回文件的大小

QString QFileInfo::suffix() const

返回文件的後綴

QString QFileInfo::symLinkTarget() const

返回符號連接指向的文件或目錄的絕對路徑

2、QDataStream

一、QDataStream簡介

    QDataStream 提供了基於 QIODevice 的二進制數據的序列化。數據流是一種二進制流,徹底不依賴於底層操做系統、CPU 或者字節順序(大端或小端)。例如,在安裝了Windows平臺的 PC 上面寫入的一個數據流,能夠不通過任何處理,直接拿到運行了Solaris的SPARC機器上讀取。因爲數據流就是二進制流,所以咱們也能夠直接讀寫沒有編碼的二進制數據,例如圖像、視頻、音頻等。

    QDataStream既可以存取C++基本類型,如int、char、short等,也能夠存取複雜的數據類型,例如自定義的類。實際上,QDataStream 對於類的存儲,是將複雜的類分割爲不少基本單元實現的。

數據流和QIODevice緊密配合使用。QIODevice是讀取數據和寫入數據的輸入輸出中介。

寫入二進制數據到流代碼以下:

QFile file("file.dat");

file.open(QIODevice::WriteOnly);

//串行化數據到到文件

QDataStream out(&file);

//串行輸出一個字符串

out << QString("the answer is");

//串行輸出一個整型

out << (qint32)42;

從流中讀取二進制數據:

QFile file("file.dat");

file.open(QIODevice::ReadOnly);

//從文件中串行化讀取數據

QDataStream in(&file);

QString str;

qint32 a;

//從文件中讀物字符串和整型

in >> str >> a;

    當輸入輸出複雜類型時,確保讀出流和寫入流的版本相同是很是重要的。若是須要流操做的先後兼容,須要在應用程序在硬編碼版本號。

stream.setVersion(QDataStream::Qt_4_0);

    若是要生成新的二進制數據格式,如由應用程序建立的文檔文件格式,可使用QDataStream以兼容格式寫入數據。一般,爲了給程序將來擴展留有餘地,能夠寫入包含魔術字符串和版本號的簡要頭信息。

QFile file("file.xxx");

file.open(QIODevice::WriteOnly);

QDataStream out(&file);

// Write a header with a "magic number" and a version

out << (quint32)0xA0B0C0D0;

out << (qint32)123;

out.setVersion(QDataStream::Qt_4_0);

// Write the data

out << lots_of_interesting_data;

讀取數據的代碼以下:

QFile file("file.xxx");

file.open(QIODevice::ReadOnly);

QDataStream in(&file);

// Read and check the header

quint32 magic;

in >> magic;

if (magic != 0xA0B0C0D0)

return XXX_BAD_FILE_FORMAT;

// Read the version

qint32 version;

in >> version;

if (version < 100)

return XXX_BAD_FILE_TOO_OLD;

if (version > 123)

return XXX_BAD_FILE_TOO_NEW;

if (version <= 110)

in.setVersion(QDataStream::Qt_3_2);

else

in.setVersion(QDataStream::Qt_4_0);

// Read the data

in >> lots_of_interesting_data;

if (version >= 120)

in >> data_new_in_XXX_version_1_2;

in >> other_interesting_data;

    當串行化數據時,能夠選擇要使用的字節序。默認設置的字節序是大端。字節序設置爲小端將會破壞兼容性,除非讀取的時候也使用小端。除非有特殊需求,通常使用默認設置的字節序。

    直接從流中讀取原生二進制數據使用readRawData()函數,寫入原生二進制數據到流使用writeRawData()函數,但數據的編解碼必須本身完成。

    與readRawData()函數不一樣,readBytes()函數讀取一個quint32長度的數據到預分配的內存空間;writeBytes()寫入quint32長度的數據。任何不一樣於quint32長度的數據的編解碼必須本身完成。

    QT容器類能夠串行化到QDataStream,包括QListQLinkedListQVectorQSetQHashQMap

    當在異步設備上使用數據流時,數據中的大部分都能在任意時間點到達。QDataStream實現了使用一系列流操做符自動讀取數據的事務機制。

二、QDataStream成員函數

QDataStream::QDataStream(QIODevice *d)

QDataStream::QDataStream(QByteArray *a, QIODevice::OpenMode mode)

QDataStream::QDataStream(const QByteArray &a)

構造函數

void QDataStream::abortTransaction()

停止一個讀取事務

bool QDataStream::atEnd() const

若是IO設備到達文件或流的結束位置,返回true

ByteOrder QDataStream::byteOrder() const

返回當前字節序設置

bool QDataStream::commitTransaction()

返回一個讀取事務,若是事務中沒有發生讀錯誤,返回true

QIODevice *QDataStream::device() const

返回當前設置的IO設備,若是沒有設置,返回0

FloatingPointPrecision QDataStream::floatingPointPrecision() const

返回數據流的浮點精度

QDataStream &QDataStream::readBytes(char *&s, uint &l)

從流中讀取緩衝區s,返回流的引用

int QDataStream::readRawData(char *s, int len)

從流中讀取至多len字節到緩衝區s,返回讀取的字節數,發生錯誤,返回-1

void QDataStream::resetStatus()

重置數據流的狀態

void QDataStream::rollbackTransaction()

恢復一個讀事務

void QDataStream::setByteOrder(ByteOrder bo)

設置串行化字節序到bo

void QDataStream::setDevice(QIODevice *d)

設置IO設備到d

void QDataStream::setFloatingPointPrecision(FloatingPointPrecision precision)

設置數據流的浮點精度到precision

void QDataStream::setStatus(Status status)

設置數據流的狀態爲給定狀態status

void QDataStream::setVersion(int v)

設置數據串行化的版本到v

    爲了適應新的功能,在某些QT版本中,一些QT類數據流串行化格式已經作出了改變。若是想讀取在早期QT版本建立的數據,或是寫只有在早期QT版本編譯的程序中才能讀取的數據,須要修改數據流串行化格式。

int QDataStream::skipRawData(int len)

跳過設備中的len個字節,返回實際跳過的字節數

void QDataStream::startTransaction()

在流中啓動一個新的讀事務

Status QDataStream::status() const

返回數據流的狀態

int QDataStream::version() const

返回數據串行化格式的版本號

QDataStream &QDataStream::writeBytes(const char *s, uint len)

寫長度爲len的緩衝區s到流,返回流的引用

int QDataStream::writeRawData(const char *s, int len)

s中寫len字節到流

5、QTextStream

1QTextStream簡介

    QTextStream爲讀寫文本提供了實用接口。QTextStream能夠操做QIODeviceQByteArray QString數據。使用QTextStream的流操做符,能夠方便讀寫字、行、數字。QTextStream支持字段填充、對齊的格式化選項和數字格式化。

QFile data("output.txt");

if (data.open(QFile::WriteOnly | QFile::Truncate))

{

    QTextStream out(&data);

    out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7;

    // writes "Result: 3.14      2.7       "

}

    一般使用QTextStream讀取控制檯輸入和寫入控制檯輸出。QTextStream支持本地化,會使用正確codec編×××自動解碼標準輸入。

QTextStream stream(stdin);

QString line;

while (stream.readLineInto(&line))

{

    ...

}

    除了使用QTextStream構造函數,可使用setDevice()setString()設置流的設備或字符串。使用seek()函數定位位置,若是沒有數據可讀,atEnd()函數會返回true。

QTextStream在內使用基於Unicode編碼的緩衝區,使用QTextCodec編譯碼器自動支持不一樣的字符集。默認,QTextCodec::codecForLocale()用於讀寫,但也能調用setCodec()設置編譯碼器。自動支持Unicode編碼檢測是默認行爲,當讀取的時候,QTextStream會檢測UTF-16或是UTF-32 BOM而且自動選擇合適的編×××。QTextStream默認不會以BOM方式寫,可是能夠調用setGenerateByteOrderMark(true)設置。QTextStream直接操做QString時,編譯碼器codec是失效的。

    默認,從文本流中讀取數字時,QTextStream會自動檢測數字的進制。若是數字以0x開頭會被假設爲16進制;數字以1--9開頭,會被假設爲10進制。

2QTextStream成員函數

QTextStream::QTextStream(QIODevice *device)

QTextStream::QTextStream(FILE *fileHandle, QIODevice::OpenMode openMode = QIODevice::ReadWrite)

QTextStream::QTextStream(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite)

QTextStream::QTextStream(QByteArray *array, QIODevice::OpenMode openMode = QIODevice::ReadWrite)

QTextStream::QTextStream(const QByteArray &array, QIODevice::OpenMode openMode = QIODevice::ReadOnly)

構造函數

bool QTextStream::atEnd() const

流中再也不有數據可讀,返回true

bool QTextStream::autoDetectUnicode() const

若是自動Unicode檢測打開,返回true

QTextCodec *QTextStream::codec() const

返回流的當前的編×××

QIODevice *QTextStream::device() const

返回流關聯的當前設備

FieldAlignment QTextStream::fieldAlignment() const

返回當前的字段對齊方式

int QTextStream::fieldWidth() const

返回當前字段寬度

void QTextStream::flush()

刷新任何在等待的緩衝區數據,寫入到設備

bool QTextStream::generateByteOrderMark() const

當使用UTF編×××時,若是流設置爲UTF BOM,返回true

int QTextStream::integerBase() const

返回整數的進制

QLocale QTextStream::locale() const

返回命令設置語言環境,默認爲C

QChar QTextStream::padChar() const

返回當前的填充字符

QString QTextStream::read(qint64 maxlen)

從流中讀取至多len字節,返回讀取的數據QString

QString QTextStream::readAll()

讀取流中的全部內容

QString QTextStream::readLine(qint64 maxlen = 0)

從流中讀取一行文本,返回的字符串不包含行結束符

容許行的最大長度爲maxlen,若是maxlen爲0,則爲容許任何長度

void QTextStream::setCodec(QTextCodec *codec)

設置流的編×××爲codec

void QTextStream::setCodec(const char *codecName)

設置流的編×××codec爲指定名字codecName的編碼,一般爲ISO 8859-1UTF-八、UTF-16

void QTextStream::setDevice(QIODevice *device)

設置當前設備到device,若是已經有設備,取代舊的設備

void QTextStream::setFieldAlignment(FieldAlignment mode)

設置字段對齊方式

void QTextStream::setFieldWidth(int width)

設置字段寬度

void QTextStream::setIntegerBase(int base)

設置整數進制

void QTextStream::setLocale(const QLocale &locale)

設置流的本地環境爲locale

void QTextStream::setPadChar(QChar ch)

設置填充字符爲ch

void QTextStream::setString(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite)

設置當前的字符串到string,打開方式爲openMode

QString *QTextStream::string() const

返回流所賦值的字符串,若是沒有字符串,返回0

相關文章
相關標籤/搜索