天天看點

Qt:78---Demo(QFile、QTextStream讀取檔案)一、QFile讀寫文本二、QTextStream類配合QFile類讀寫文本

  • 文本案例文法知識來自于:https://blog.csdn.net/qq_41453285/article/details/100012196
Qt:78---Demo(QFile、QTextStream讀取檔案)一、QFile讀寫文本二、QTextStream類配合QFile類讀寫文本

一、QFile讀寫文本

“QFile直接打開”按鈕的triggered函數

//點選按鈕,打開一個文本,調用openTextByIODevice函數
void MainWindow::on_actOpen_IODevice_triggered()
{
    QString filter=QStringLiteral("程式檔案(*.h *.cpp);;文本檔案(*.txt);;\
                                所有檔案(*.*)");
    QString aFileName=QFileDialog::getOpenFileName(this,QStringLiteral("打開一個檔案"),QDir::currentPath(),filter);
    if(aFileName.isEmpty())
        return;
    openTextByIODevice(aFileName);
}
           
//自定義函數:讀取文本檔案,将内容顯示到textEditDevice控件中
bool MainWindow::openTextByIODevice(const QString &aFileName)
{
    QFile aFile(aFileName); //建立檔案對象
    if(!aFile.exists()) //判斷檔案是否存在
        return false;
    if(!aFile.open(QIODevice::ReadOnly|QIODevice::Text)) //打開檔案
        return false;
    ui->textEditDevice->setPlainText(aFile.readAll()); //顯示内容
    aFile.close(); //關閉檔案
    return true;
}
           

“QFile另存”按鈕的triggered函數

//另存檔案,調用saveTextByIODevice函數
void MainWindow::on_actSave_IODevice_triggered()
{
    QString filter=QStringLiteral(".h檔案(*.h);;C++檔案(*.cpp);;所有檔案(*.*)");
    QString aFileName=QFileDialog::getSaveFileName(this,\
                            QStringLiteral("另存為一個檔案"),QDir::currentPath(),filter);
    if(aFileName.isEmpty())
        return;
    saveTextByIODevice(aFileName);
}
           
//自定義函數,将textEditDevice控件的内容另存為一個檔案
bool MainWindow::saveTextByIODevice(const QString &aFileName)
{
    QFile aFile(aFileName);
    if(!aFile.open(QIODevice::WriteOnly|QIODevice::Text)) //打開檔案
        return false;
    QString str=ui->textEditDevice->toPlainText(); //擷取内容
    QByteArray strBytes=str.toUtf8(); //将内容轉換為位元組數組,并且轉換為UTF8編碼格式
    aFile.write(strBytes,strBytes.length()); //寫入檔案
    aFile.close();//關閉檔案
    return true;
}
           

二、QTextStream類配合QFile類讀寫文本

“QTextStream打開”按鈕的triggered函數

//打開一個檔案,調用自定義函數openTextByStream
void MainWindow::on_actOpen_Stream_triggered()
{
    QString filter=QStringLiteral("程式檔案(*.h *.cpp);;文本檔案(*.txt);;\
                                所有檔案(*.*)");
    QString aFileName=QFileDialog::getOpenFileName(this,QStringLiteral("打開一個檔案"),QDir::currentPath(),filter);
    if(aFileName.isEmpty())
        return;
    openTextByStream(aFileName);
}
           
//打開一個QFile類對象,然後建立該對象的QTextStream類流對象讀取檔案
bool MainWindow::openTextByStream(const QString &aFileName)
{
    QFile aFile(aFileName);
    if(!aFile.exists())
        return false;
    if(!aFile.open(QIODevice::ReadOnly|QIODevice::Text))
        return false;

    QTextStream aStream(&aFile); //通過aFile打開一個QTextStream類型的對象
    aStream.setAutoDetectUnicode(true); //設定為自動識别Unicode編碼
    ui->textEditDevice->setPlainText(aStream.readAll());
    return true;
}
           

“QTextStream另存”按鈕的triggered函數

//儲存檔案,并調用saveTextByStream自定義函數
void MainWindow::on_actSave_Stream_triggered()
{
    QString filter=QStringLiteral(".h檔案(*.h);;C++檔案(*.cpp);;所有檔案(*.*)");
    QString aFileName=QFileDialog::getSaveFileName(this,\
                            QStringLiteral("另存為一個檔案"),QDir::currentPath(),filter);
    if(aFileName.isEmpty())
        return;
    saveTextByStream(aFileName);
}
           
bool MainWindow::saveTextByStream(const QString &aFileName)
{
    QFile aFile(aFileName);
    if(!aFile.open(QIODevice::WriteOnly|QIODevice::Text))
        return false;

    QTextStream aStream(&aFile);
    aStream.setAutoDetectUnicode(true);
    QString str=ui->textEditDevice->toPlainText();
    aStream <<str; //将檔案内容寫入aStream中
    aFile.close();

    return true;
}
           

繼續閱讀