- 文本案例文法知識來自于: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;
}