QT打开文件并显示文件内容
功能描述
当点击一个按钮的时候,实现打开指定类型的文件,并在另一个子窗口中显示文件的内容
核心函数分析
QString QFileDialog::getOpenFileName(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options())
- QWidget *parent =指定的父类
- const QString &caption=文件打开窗的标题
- const QString &dir=more打开的地址
- const QString &filter=指定需要打开文件的类型
静态页面布局
主页面布局
主页面为一个Widget窗口,包含一个lineEdit文本框,用以输入文件的目录。打开目录按钮,用以显示子界面,并选择打开文件。
子页面布局
子界面包含一个文本框,用以显示读入的文本数据,并包含清空按钮,用以清除文本框的文字。关闭按钮将实现关闭整个界面。
代码逻辑
主页面.h函数
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QFileDialog>
#include<QDebug>
#include<QMessageBox>
//在父类中引入子类的头文件和ui头文件
#include"fileshow.h"
#include"ui_fileshow.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_btnOpenFile_clicked();
private:
Ui::Widget *ui;
//定义子类的成员
FileShow *fileS;
};
#endif // WIDGET_H
主页面.cpp函数
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->setWindowTitle("文件打开系统");
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_btnOpenFile_clicked()
{
QString addrStr=ui->lineEditFile->text();
//打开文件管理界面,返回打开文件的文件名和文件路径
QString textfile=QFileDialog::getOpenFileName(this,tr("文件"),addrStr,tr("text(*.txt)"));
qDebug()<<textfile;
//判断是否选择了文件
if(!textfile.isNull())
{
QFile file(textfile);
//当文件无法进行读操作的时候,将弹出信息框
if(!file.open(QFile::ReadOnly|QFile::Text))
{
QMessageBox::warning(this,tr("Error"),tr("read file error:&1").arg(file.errorString()));
return;
}
//定义文本流
QTextStream in(&file);
//调用子类显示
fileS=new FileShow(this);
fileS->ui->textEditFileShow->setText(in.readAll());
fileS->show();
}
}
子页面.cpp函数
#include "fileshow.h"
#include "ui_fileshow.h"
FileShow::FileShow(QWidget *parent) :
QDialog(parent),
ui(new Ui::FileShow)
{
ui->setupUi(this);
this->setWindowTitle("显示打开文件");
}
FileShow::~FileShow()
{
delete ui;
}
void FileShow::on_btnClearShow_clicked()
{
ui->textEditFileShow->clear();
}
void FileShow::on_btnCloseTextShow_clicked()
{
this->close();
}
演示效果