溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Qt中文本流和數(shù)據(jù)流、緩沖操作和數(shù)據(jù)操作的示例分析

發(fā)布時間:2021-11-25 09:26:40 來源:億速云 閱讀:172 作者:小新 欄目:編程語言

小編給大家分享一下Qt中文本流和數(shù)據(jù)流、緩沖操作和數(shù)據(jù)操作的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一.文本流和數(shù)據(jù)流

A.Qt中講文件類型分為2大類
1.文本文件--文件內(nèi)容是可讀的文本字符
2.數(shù)據(jù)文件--文件內(nèi)容是直接的二進制數(shù)據(jù)
QFile直接支持文本文件和數(shù)據(jù)文件的讀寫
Qt中文本流和數(shù)據(jù)流、緩沖操作和數(shù)據(jù)操作的示例分析
B.Qt提供了輔助類簡化了文本文件/數(shù)據(jù)文件的讀寫
1.QTextStream--寫入的數(shù)據(jù)全部轉(zhuǎn)換為可讀文本
2.QDataStream--寫入的數(shù)據(jù)根據(jù)類型轉(zhuǎn)換為二進制數(shù)據(jù)
IO設(shè)備輔助類的使用方式
Qt中文本流和數(shù)據(jù)流、緩沖操作和數(shù)據(jù)操作的示例分析
不同的Qt版本的數(shù)據(jù)流文件格式可能不同
void setVersion(int v)//設(shè)置的版本號
int version()const//獲取讀寫版本號

代碼示例

#include <QCoreApplication>
#include <QFile>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QFile file("C:/Users/59673/Desktop/test.hex");

    if( file.open(QIODevice::WriteOnly) )
    {
        QString dt = "mylovedandanxiaohai";
        double value = 3.14;

        file.write(dt.toStdString().c_str());
        file.write(reinterpret_cast<char*>(&value), sizeof(value));

        file.close();
    }

    if( file.open(QIODevice::ReadOnly) )
    {
        QString dt = "";
        double value = 0;

        dt = QString(file.read(19));
        file.read(reinterpret_cast<char*>(&value), sizeof(value));

        file.close();

        qDebug() << dt;
        qDebug() << value;
    }

    return a.exec();
}

運行結(jié)果
Qt中文本流和數(shù)據(jù)流、緩沖操作和數(shù)據(jù)操作的示例分析

二.緩沖區(qū)操作與目錄操作

A.Qt中緩沖區(qū)的概念
1.緩沖區(qū)的本質(zhì)為一段連續(xù)的存儲空間
2.QBuffer是Qt中緩沖區(qū)相關(guān)的類
3.在Qt中可以將緩沖區(qū)看作一種特殊的IO設(shè)備
4.文件流輔助類可以直接用于操作緩沖區(qū)
QBuffer緩沖區(qū)的使用方式Qt中文本流和數(shù)據(jù)流、緩沖操作和數(shù)據(jù)操作的示例分析
代碼示例

#include <QtCore/QCoreApplication>
#include <QBuffer>
#include <QByteArray>
#include <QDataStream>
#include <QDebug>

void write_buffer(int type, QBuffer& buffer)
{
    if( buffer.open(QIODevice::WriteOnly) )
    {
        QDataStream out(&buffer);

        out << type;

        if( type == 0 )
        {
            out << QString("mylove");
            out << QString("3.1415");
        }
        else if( type == 1 )
        {
            out << 3;
            out << 1415;
        }
        else if( type == 2 )
        {
            out << 3.1415;
        }

        buffer.close();
    }
}

void read_buffer(QBuffer& buffer)
{
    if( buffer.open(QIODevice::ReadOnly) )
    {
        int type = -1;
        QDataStream in(&buffer);

        in >> type;

        if( type == 0 )
        {
            QString dt = "";
            QString pi = "";

            in >> dt;
            in >> pi;

            qDebug() << dt;
            qDebug() << pi;
        }
        else if( type == 1 )
        {
            int a = 0;
            int b = 0;

            in >> a;
            in >> b;

            qDebug() << a;
            qDebug() << b;
        }
        else if( type == 2 )
        {
            double pi = 0;

            in >> pi;

            qDebug() << pi;
        }

        buffer.close();
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QByteArray array;
    QBuffer buffer(&array);

    write_buffer(0, buffer);
    read_buffer(buffer);

    return a.exec();
}

運行結(jié)果
Qt中文本流和數(shù)據(jù)流、緩沖操作和數(shù)據(jù)操作的示例分析
B.QBuffer緩沖區(qū)的使用場合
1.在線程間進行不同類型的數(shù)據(jù)傳遞
2.緩存外部設(shè)備中的數(shù)據(jù)返回
3.數(shù)據(jù)讀取速度小于數(shù)據(jù)寫入速度
C.QDir是Qt中功能強大的目錄操作類
1.Qt中的目錄分隔符統(tǒng)一使用'/'
2.QDir能夠?qū)δ夸涍M行任意的操作--創(chuàng)建、刪除、重命名
3.QDir能夠獲取指定目錄中的所有條目--文件和文件夾
4.QDir能夠使用過濾字符串獲取指定條目
5.QDir能夠獲取系統(tǒng)中的所有根目錄
目錄操作基礎(chǔ)示例
Qt中文本流和數(shù)據(jù)流、緩沖操作和數(shù)據(jù)操作的示例分析

C.QFileSystemWatcher用于監(jiān)控文件和目錄的狀態(tài)變化
1.能夠監(jiān)控特定目錄和文件的狀態(tài)
2.能夠同時對多個目錄和文件進行監(jiān)控
3.當目錄或者文件發(fā)生改變時將觸發(fā)信號
4.可以通過信號與槽的機制捕捉信號并作出響應(yīng)Qt中文本流和數(shù)據(jù)流、緩沖操作和數(shù)據(jù)操作的示例分析

以上是“Qt中文本流和數(shù)據(jù)流、緩沖操作和數(shù)據(jù)操作的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

qt
AI