天天看點

Qt 文本檔案讀寫

1.文本檔案

文本檔案是指以純文字格式存儲的檔案,例如用 Qt Creator 編寫的 C++ 程式的頭檔案(上檔案)和源程式檔案(.cpp 檔案)。HTML 和 XML 檔案也是純文字檔案,隻是其讀取之後需要對内容進行解析之後再顯示。

Qt 提供了兩種讀寫純文字檔案的基本方法:

  • 用 QFile 類的 IODevice 讀寫功能直接進行讀寫
  • 利用 QFile 和 QTextStream 結合起來,用流(Stream)的方法進行檔案讀寫。

2.QFile讀寫文本檔案

QFile::open() 函數打開檔案時需要傳遞 

QIODevice::OpenModeFlag

 枚舉類型的參數,決定檔案以什麼方式打開,QIODevice::OpenModeFlag 類型的主要取值如下:

  • QIODevice::ReadOnly:以隻讀方式打開檔案,用于載入檔案。
  • QIODevice::WriteOnly:以隻寫方式打開檔案,用于儲存檔案。
  • QIODevice::ReadWrite:以讀寫方式打開。
  • QIODevice::Append:以添加模式打開,新寫入檔案的資料添加到檔案尾部。
  • QIODevice::Truncate:以截取方式打開檔案,檔案原有的内容全部被删除。
  • QIODevice::Text:以文本方式打開檔案,讀取時“\n”被自動翻譯為換行符,寫入時字元串結束符會自動翻譯為系統平台的編碼,如 Windows 平台下是“\r\n”。

讀檔案顯示到QPlaintextEdit上

QString fileName = "test.txt";

    QFile file(fileName);

    //檔案不存在
    if (!file.exists())
        return false;
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return false;

    //設定QPlaintextEdit顯示結果
    ui->plaintextEdit->setPlainText(file.readAll());

    file.close();
           

QPlaintextEdit上寫檔案到本地

QString fileName = "save.txt";

    QFile file(fileName);

    if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
      return false;

    //整個内容作為字元串
    QString str=ui->palinTextEdit->toPlainText();

    //轉換為位元組數組
    QByteArray  strBytes=str.toUtf8();

    //寫入檔案
    file.write(strBytes,strBytes.length());

    //關閉
    file.close();
           

3.QFile和QTextStream結合讀寫文本檔案

QTextStream 可以與 QFile、QTemporaryFile、QBuffer、QTcpSocket 和 QUdpSocket 等 IO 裝置類結合使用。

讀取文本檔案

QString fileName = "test.txt";

    QFile file(fileName);

    if (!file.exists()) //檔案不存在
        return false;

    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
      return false;

    //用文本流讀取檔案
    QTextStream stream(&file);

    //設定内容
    ui->plainTextEdit->setPlainText(stream.readAll());

    //關閉檔案
    file.close();
           

寫文本檔案

QString fileName = "save.txt";

    QFile file(fileName);

    if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
      return false;

    //用文本流讀取檔案
    QTextStream stream(&file);

    //轉換為字元串
    QString str=ui->plainTextEdit->toPlainText();

    //寫入文本流
    stream<<str;

    //關閉檔案
    file.close();
           

解決中文亂碼的問題

在使用 QTextStream 讀寫有中文内容的文本檔案時,為了能正确識别 Unicode 碼,需要調用 setAutoDetectUnicode(true),設定 QTextStream 可以自動識别 Unicode 碼,如果不做此設定,讀取檔案的中文将是亂碼,無法正常顯示。

為解決 Unicode 的識别問題,可以在應用程式中做全局的設定,使得應用程式支援 Unicode。方法是在 main() 函數中使用 QTextCodec 類進行編碼設定。

//解決漢字亂碼問題
    QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForLocale(codec);
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
           

繼續閱讀