在qt中,操作现存文件的流程:
一:QFileDialog 利用这个类可以通过对话框获得文件的目录 QFileDialog::getOpenFileName()
二:QFile 利用这个类,我们可以打开文件
三 :QTextStream 这是一个txt流,用于读写文件
具体类的代码展示
一:QfileDialog
QString path=QFileDialog::getOpenFileName(this,tr("open File"),".",tr("Text Files(*.txt)")); // 获得文件的地址
二:QFile
QFile file(path); // 创建文件类 file
三:
QTextStream in(&file);// 将文件file类 注入in 流中
textEdit->setText(in.readAll());// 将txt流in 中的内容转送给TextEdit
主要细节代码展示
//下面是添加动作的代码,将动作进行绑定,进而进行下一步的操作
// 打开文件的动作
openAction = new QAction(QIcon(":/images/file-open"), tr("&Open..."), this);
openAction->setShortcuts(QKeySequence::Open);
openAction->setStatusTip(tr("Open an existing file"));
//保存文件的动作
saveAction = new QAction(QIcon(":/images/file-save"), tr("&Save..."), this);
saveAction->setShortcuts(QKeySequence::Save);
saveAction->setStatusTip(tr("Save a new file"));
//将动作添加到菜单栏上
QMenu *file = menuBar()->addMenu(tr("&File"));
file->addAction(openAction);
file->addAction(saveAction);
//将动作添加到工具栏上
QToolBar *toolBar = addToolBar(tr("&File"));
toolBar->addAction(openAction);
toolBar->addAction(saveAction);
textEdit = new QTextEdit(this);
setCentralWidget(textEdit);
///
//对动作与方法进行绑定
connect(openAction, &QAction::triggered, this, &MainWindow::openFile);
connect(saveAction, &QAction::triggered, this, &MainWindow::saveFile);
///
//动作绑定的方法的具体实现
void MainWindow::openFile()
{
QString path = QFileDialog::getOpenFileName(this,
tr("Open File"),
".",
tr("Text Files(*.txt)"));
//从QDialog对话框,获得文件的地址目录
if(!path.isEmpty()) {//判断文件地址是否为空
QFile file(path); //创建文件类
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {//判断文件是否可执行
QMessageBox::warning(this, tr("Read File"),
tr("Cannot open file:\n%1").arg(path));
return;
}
QTextStream in(&file);//创建text流
textEdit->setText(in.readAll()); //将流中的内容输出到textEdit
file.close();
} else {
QMessageBox::warning(this, tr("Path"),
tr("You did not select any file."));
}
}
//保存文件的方法
void MainWindow::saveFile()
{
QString path = QFileDialog::getSaveFileName(this,
tr("Open File"),
".",
tr("Text Files(*.txt)"));
if(!path.isEmpty()) {
QFile file(path);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QMessageBox::warning(this, tr("Write File"),
tr("Cannot open file:\n%1").arg(path));
return;
}
QTextStream out(&file);
out << textEdit->toPlainText();
file.close();
} else {
QMessageBox::warning(this, tr("Path"),
tr("You did not select any file."));
}
}
在结尾,要着重讲一个类方法:getOpenFileName
QString getOpenFileName(QWidget * parent = 0,
const QString & caption = QString(),
const QString & dir = QString(),
const QString & filter = QString(),
QString * selectedFilter = 0,
Options options = 0)
/*
parent:父窗口。我们前面介绍过,Qt 的标准对话框提供静态函数,用于返回一个模态对话框
caption:对话框标题;
dir:对话框打开时的默认目录,“.” 代表程序运行目录,“/” 代表当前盘符的根目录(特指 Windows 平台;Linux 平台当然就是根目录),这个参数也可以是平台相关的,比如“C:\\”等;
filter:过滤器。我们使用文件对话框可以浏览很多类型的文件,但是,很多时候我们仅希望打开特定类型的文件。比如,文本编辑器希望打开文本文件,图片浏览器希望打开图片文件。过滤器就是用于过滤特定的后缀名。如果我们使用“Image Files(*.jpg *.png)”,则只能显示后缀名是 jpg 或者 png 的文件。如果需要多个过滤器,使用“;;”分割,比如“JPEG Files(*.jpg);;PNG Files(*.png)”;
selectedFilter:默认选择的过滤器;
options:对话框的一些参数设定,比如只显示文件夹等等,它的取值是 enum QFileDialog::Option,每个选项可以使用 | 运算组合起来。
*/
这节主要学到两个知识点:
一:如何根据QFileDialog对话框打开文件对应的文件
二:怎样填写QFile文件内容并且保存