QTextStream: Qt 提供的文本輸入輸出流

在 Qt 中,我們可以使用 QTextStream 來實現對文本文件的輸入輸出操作。QTextStream 提供了方便的方法來讀寫文件、字符串和標準輸入輸出。本文將會從以下幾個方面介紹 QTextStream 的使用:

一、QByteArray 轉 QString

我們知道,在處理二進制數據的時候,通常會使用 QByteArray 類型進行存儲和傳輸。但是有時候我們需要將 QByteArray 轉換成文字格式的數據,這時候我們就需要用到 QTextStream 了。

示例代碼如下:

QByteArray array = QByteArray::fromHex("E4 B8 AD E6 96 87"); // 二進制數據
QString str;
QTextStream stream(&str, QIODevice::WriteOnly);
stream << array;
qDebug() << str; // 輸出: 中文

在上面的示例中,我們通過 fromHex 函數將十六進制字符串轉成二進制數據,再使用 QTextStream 將二進制數據轉成了 UTF-8 編碼的中文字符。

二、QString 轉 QByteArray

與將 QByteArray 轉成 QString 相似,我們也可以使用 QTextStream 將 QString 轉成二進制數據。

示例代碼如下:

QString str = "中文";
QByteArray array;
QTextStream stream(&array, QIODevice::WriteOnly);
stream << str;
qDebug() << array.toHex(); // 輸出: e4b8ade69687

在上面的示例中,我們通過 QTextStream 將 UTF-8 編碼的中文字符轉成二進制數據,再通過 toHex 函數將二進制數據轉成了十六進制字符串。

三、從文件中讀取數據

當我們需要從文件中讀取數據時,QTextStream 提供了 read、readLine 和 operator>> 等函數。

示例代碼如下:

QFile file("example.txt");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
    QTextStream stream(&file);
    QString line;
    while (!stream.atEnd()) {
        stream >> line;
        qDebug() << line;
    }
    file.close();
}

在上面的示例中,我們打開名為 example.txt 的文件,並通過 QTextStream 對其進行讀取。每次讀取一行,直到文件結束。

四、向文件中寫入數據

與從文件中讀取類似,QTextStream 也提供了 write、writeLine 和 operator<< 等函數來向文件中寫入數據。

示例代碼如下:

QFile file("example.txt");
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
    QTextStream stream(&file);
    stream << "Hello, ";
    stream << "world!" << endl;
    file.close();
}

在上面的示例中,我們寫入了兩行數據到 example.txt 文件中,分別為 “Hello, ” 和 “world!”。

五、基於 QTextStream 的自定義輸入輸出操作符

我們可以基於 QTextStream 的輸入輸出操作符來定義自己的輸入輸出格式。

示例代碼如下:

class MyType {
public:
    int value1;
    float value2;
};

QTextStream &operator<<(QTextStream &stream, const MyType &type)
{
    stream << type.value1 << " " <>(QTextStream &stream, MyType &type)
{
    stream >> type.value1 >> type.value2;
    return stream;
}

int main()
{
    MyType t = { 42, 3.14f };
    QString str;
    QTextStream stream(&str, QIODevice::ReadWrite);
    stream << t;
    qDebug() <> t2;
    qDebug() << t2.value1 << t2.value2; // 輸出: 42 3.14f
    return 0;
}

在上面的示例中,我們定義了一個名為 MyType 的結構體,並基於 QTextStream 的輸入輸出操作符來定義了 MyType 的輸入輸出格式。最後我們創建了一個 MyType 類型的變量 t,並通過 QTextStream 將其寫入到了字符串 str 中。再將 str 中的數據讀出來,並通過 qDebug 輸出。

原創文章,作者:GLQA,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/135208.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
GLQA的頭像GLQA
上一篇 2024-10-04 00:11
下一篇 2024-10-04 00:11

相關推薦

  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • 文本數據挖掘與Python應用PDF

    本文將介紹如何使用Python進行文本數據挖掘,並將着重介紹如何應用PDF文件進行數據挖掘。 一、Python與文本數據挖掘 Python是一種高級編程語言,具有簡單易學、代碼可讀…

    編程 2025-04-28
  • Python文本居中設置

    在Python編程中,有時需要將文本進行居中設置,這個過程需要用到字符串的相關函數。本文將從多個方面對Python文本居中設置作詳細闡述,幫助讀者在實際編程中運用該功能。 一、字符…

    編程 2025-04-28
  • t3.js:一個全能的JavaScript動態文本替換工具

    t3.js是一個非常流行的JavaScript動態文本替換工具,它是一個輕量級庫,能夠很容易地實現文本內容的遞增、遞減、替換、切換以及其他各種操作。在本文中,我們將從多個方面探討t…

    編程 2025-04-28
  • Navicat導出字段識別為文本而不是數值

    解決方法:使用特定的代碼將導出的字段識別為文本,而不是數值,下面將從多個方面進行詳細闡述。 一、ASCII碼轉換 在導出的文件中,將數值字段使用ASCII碼轉換,即可讓這些字段被識…

    編程 2025-04-28
  • Python文本處理第三方庫有哪些

    Python是一種高級語言,它的功能非常強大和全面,其中最重要之一就是它的文本處理能力。文本處理對於自然語言處理以及大數據分析都有着非常重要的作用。Python的標準庫提供了字符串…

    編程 2025-04-27
  • Qt State Machine與狀態機模式

    本文將介紹Qt State Machine和狀態機模式在Qt中的實現。Qt提供了QStateMachine和QState兩個類,可以方便地實現狀態機模式,並且能有效地處理複雜的、多…

    編程 2025-04-27
  • Python提取文本所有字符

    本文將介紹如何使用Python提取文本所有字符。Python作為一種強大的編程語言,提供了多種方法用於操作文本數據,其中包括提取所有字符。 一、字符串基礎知識 1、字符串是什麼? …

    編程 2025-04-27
  • Python中的Qt庫

    Qt庫是一個跨平台的C++圖形用戶界面(GUI)工具包。它提供了豐富的界面控件和處理系統事件的功能,可以輕鬆創建交互界面、圖形化應用和多媒體應用。而Python中的Qt庫則是Qt的…

    編程 2025-04-27
  • 文本導入嚮導刪除已導入數據

    本文將從多個方面對文本導入嚮導刪除已導入數據進行詳細的闡述。 一、如何打開文本導入嚮導? 1、打開Excel文件,在「數據」選項卡中找到「來自文本」選項,點擊彈出「文本導入嚮導」窗…

    編程 2025-04-27

發表回復

登錄後才能評論