文件对话框(QFileDialog)

来源:互联网 发布:php项目开发流程 编辑:程序博客网 时间:2024/04/30 09:06
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QAction>#include <QTextEdit>class MainWindow : public QMainWindow{    Q_OBJECTprivate:    QAction *openaction;    QAction *saveaction;    QTextEdit *textedit;private slots:    void openfile();    void savefile();public:    MainWindow(QWidget *parent = 0);    ~MainWindow();};#endif // MAINWINDOW_H
#include "mainwindow.h"#include <QMenuBar>#include <QToolBar>#include <QStatusBar>#include <QString>#include <QFileDialog>#include <QFile>#include <QIODevice>#include <QMessageBox>#include <QTextStream>MainWindow::MainWindow(QWidget *parent)    : QMainWindow(parent){    this->setWindowTitle("文件对话框");    this->setMinimumSize(300,300);    openaction=new QAction(QIcon(":/new/prefix1/ico"),tr("&open"),this);    openaction->setShortcuts(QKeySequence::Open);    openaction->setStatusTip("打开文件");    saveaction=new QAction(QIcon(":/new/prefix2/ico2"),tr("&save"),this);    saveaction->setShortcuts(QKeySequence::Save);    saveaction->setStatusTip("保存文件");    QMenu *file=menuBar()->addMenu(tr("&File"));    file->addAction(openaction);    file->addAction(saveaction);    QToolBar *toolbar=addToolBar(tr("&File"));    toolbar->addAction(openaction);    toolbar->addAction(saveaction);    QStatusBar *statusbar=statusBar();    statusbar->addAction(openaction);    statusbar->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(){    /*     * 在 openFile() 函数中,我们使用 QFileDialog::getOpenFileName() 来获取需要打开的文件的路径。     * 该函数有六个参数,都是可选的:     * parent:父窗口。我们前面介绍过, Qt 的标准对话框提供静态函数,用于返回一个模态对话框     * (在一定程度上这就是外观模式的一种体现);     *  caption:对话框标题;     *  dir:对话框打开时的默认目录, “.” 代表程序运行目录, “/” 代表当前盘符的根目录     * (特指 Windows 平台; Linux 平台当然就是根目录),这个参数也可以是平台相关的,比如“C:\\”等;     * filter:过滤器。我们使用文件对话框可以浏览很多类型的文件,但是,很多时候我们仅希望打开特定     * 类型的文件。比如,文本编辑器希望打开文本文件,图片浏览器希望打开图片文件。过滤器就是用于过滤     * 特定的后缀名。如果我们使用“ImageFiles(*.jpg *.png)”,则只能显示后缀名是 jpg 或者 png 的文件。     * 如果需要多个过滤器,使用“;;”分割,比如“JPEG Files(*.jpg);;PNG Files(*.png)”;     * selectedFilter:默认选择的过滤器;     * options:对话框的一些参数设定,比如只显示文件夹等等,它的取值是 enumQFileDialog::Option,     * 每个选项可以使用 | 运算组合起来。    */    QString path=QFileDialog::getOpenFileName(this,tr("打开文件"),".",tr("text files(*.txt)"));    /*     * QFileDialog::getOpenFileName() 返回值是选择的文件路径。我们将其赋值给 path。通过判断     * path 是否为空,可以确定用户是否选择了某一文件。     * 首先,我们创建一个 QFile 对象,将用户选择的文件路径传递给这个对象。然后我们需要打开这个文件,     * 使用的是 QFile::open(),其参数是指定的打开方式,这里我们使用只读方式和文本方式打开这个文件     * (因为我们选择的是后缀名 txt 的文件,可以认为是文本文件。当然,在实际应用中,可能需要进行进     * 一步的判断)。 QFile::open() 打开成功则返回 true,由此继续进行下面的操作:     * 使用 QTextStream::readAll() 读取文件所有内容,然后将其赋值给 QTextEdit 显示出来。    */    if(!path.isEmpty()){        QFile file(path);        if(!file.open(QIODevice::ReadOnly|QIODevice::Text)){            QMessageBox::warning(this,tr("read file"),tr("不能打开文件").arg(path));            return;        }        QTextStream in(&file);        textedit->setText(in.readAll());        file.close();    }    else{        QMessageBox::warning(this,tr("path"),tr("你没有选择任何路径"));    }}void MainWindow::savefile(){    QString path=QFileDialog::getSaveFileName(this,tr("保存文件"),".",tr("text files(*.txt)"));    if(!path.isEmpty()){        QFile file(path);        if(!file.open(QIODevice::WriteOnly|QIODevice::Text)){            QMessageBox::warning(this,tr("write file"),tr("不能打开文件").arg(path));            return;        }        QTextStream out(&file);        out<<textedit->toPlainText();        file.close();    }    else{        QMessageBox::warning(this,tr("path"),tr("你没有选择任何文件"));    }}MainWindow::~MainWindow(){}

0 0