QT实战教程:
本文源码地址:QT文件读写
文件对话框
在详细了解QT
的文件读写功能之前,可以先实现一个小功能,即选择一个文件,并将这个文件名显示出来。
先在设计界面拖三个控件,分别是pushButton,lineEdit以及textBrowser。将后两者改名为lineTitle
和txtContent
,然后为pushButton添加槽,即右键->转到槽->click(),然后在自动生成的代码中添加
#include "qfiledialog.h"
void MainWindow::on_pushButton_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this,"请选择文件","/");
ui->lineTitle->setText(fileName);
}
其中QFileDialog
是文件对话框,其效果为
读取文件
QT
封装了QFile
类用于文件的输入输出,在构造之时需输入文件的路径,然后可以用成员函数open
来打开文件,用readAll
来读取内容,结果为
代码如下
void MainWindow::on_pushButton_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this,"请选择文件","/");
ui->lineTitle->setText(fileName);
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly|QIODevice::Text))
ui->txtContent->setText("文件打开失败");
else
ui->txtContent->setText(file.readAll());
}
其中ReadOnly
表示只读,Text
表示以文本形式打开。
file.open
如果成功则返回true
,否则返回false
。
写入文件
接下来实现一个功能——把刚刚读取的文件另存为其他文件。
首先拖一个pushButton控件,并改名为btnSaveAs
,然后添加clicked
动作,代码为
void MainWindow::on_btnSaveAs_clicked()
{
QString fileName = QFileDialog::getSaveFileName(this,"请输入文件名");
ui->lineTitle->setText(fileName);
QFile file(fileName);
if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
ui->lineTitle->setText("文件保存失败");
else{
QString txt = ui->txtContent->toPlainText();
file.write(txt.toUtf8());
ui->lineTitle->setText(fileName);
}
}
其中,getSaveFileName
是一个保存对话框,十分便于存储操作。
file.write
有三个重载,但并不支持QString
的输入,故而用toUtf8
将其转为字符串。
结果如图所示
根据上图,可知这些内容存入了名为test.txt
的文件中。
复制和剪切
QFile
除了实现文件读写等功能之外,还提供了一些直接操作文件的功能。例如copy
,rename
,remove
等,顾名思义用于复制、重命名以及删除。
其中,rename
也可以起到剪切的作用,接下来演示一下,新建一个按钮,然后点击时触发函数
void MainWindow::on_btnCutFile_clicked()
{
QString oldName = QFileDialog::getOpenFileName(this,"请选择文件");
QString newName = QFileDialog::getSaveFileName(this,"请输入文件名");
QFile::rename(oldName,newName);
ui->txtContent->setText("file moved from"+oldName+"to"+newName);
}
从而得到效果