(8)QFileDialog---文件打开和保存对话框

本文详细介绍了Qt5中QFileDialog的使用方法,包括如何通过getOpenFileName()函数选择打开文件,以及如何选择多个文件。同时,还讲解了getSaveFileName()函数的使用,以及如何在Qt5中进行文件选择的基本技巧。

感谢豆子先生的整理,我只是在Qt5上进一步整理而已:

QFileDialog是Qt中用于文件打开和保存的对话框:

修改前面章节中的open()函数:

//槽函数的实现
void MainWindow::open()
{
    //方法一
    //为了说明QFileDialog::getOpenFileName()函数的用法,还是先把函数签名放在这里:
    //QString QFileDialog::getOpenFileName (
   //           QWidget * parent = 0,
   //           const QString & caption = QString(),
   //           const QString & dir = QString(),
   //           const QString & filter = QString(),
    //          QString * selectedFilter = 0,
    //          Options options = 0 )

    // 第一个参数parent,用于指定父组件。注意,很多Qt组件的构造函数都会有这么一个parent参数,并提供一个默认值0;
    //第二个参数caption,是对话框的标题;
    //第三个参数dir,是对话框显示时默认打开的目录,"." 代表程序运行目录,"/" 代表当前盘符的根目录(Windows,Linux下/就是根目录了),也可以是平台相关的,比如"C:\\"等;
    //第四个参数filter,是对话框的后缀名过滤器,比如我们使用"Image Files(*.jpg *.png)"就让它只能显示后缀名是jpg或者png的文件。如果需要使用多个过滤器,使用";;"分割,比如"JPEG Files(*.jpg);;PNG Files(*.png)";
    // 第五个参数selectedFilter,是默认选择的过滤器;
    // 第六个参数options,是对话框的一些参数设定,比如只显示文件夹等等,它的取值是enum QFileDialog::Option,每个选项可以使用 | 运算组合起来。
    QString path = QFileDialog::getOpenFileName(this, tr("Open Image"), ".", tr("Image Files*.png"));
    if (path.length() == 0)
    {
        QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files."));
    }
    else
    {
        QMessageBox::information(NULL, tr("Path"), tr("You selected") + path);
    }

    //方法二
    //FileDialog提供了很多静态函数,用于获取用户选择的文件。
    //这里我们使用的是getOpenFileName(), 也就是“获取打开文件名”,
    //你也可以查看API找到更多的函数使用。
    //不过,这个函数的参数蛮长的,而且类型都是QString,并不好记。
    //考虑到这种情况,Qt提供了另外的写法:
    QFileDialog *fileDialog = new QFileDialog(this);
    fileDialog->setWindowTitle(tr("Open Image"));
    fileDialog->setDirectory(".");
    fileDialog->setFilter(QDir::Files);
    if(fileDialog->exec() == QDialog::Accepted) {
        QString path = fileDialog->selectedFiles()[0];
        QMessageBox::information(NULL, tr("Path"), tr("You selected ") + path);
    } else {
        QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files."));
    }

    //不过,这两种写法虽然功能差别不大,但是弹出的对话框却并不一样。
    //getOpenFileName()函数在Windows和MacOS X平台上提供的是本地的对话框,
    //而QFileDialog提供的始终是Qt自己绘制的对话框。
}

如果我要想选择多个文件怎么办呢?Qt提供了getOpenFileNames()函数,其返回值是一个QStringList。你可以把它理解成一个只能存放QString的List,也就是STL中的list<string>。
 
好了,我们已经能够选择打开文件了。保存也是类似的,QFileDialog类也提供了保存对话框的函数getSaveFileName,具体使用还是请查阅API。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值