Qt之GUI学习笔记(十)----QFileDialog

原文地址:http://devbean.blog.51cto.com/448512/213414
一 简介
QT的标准对话框,就是Qt内置的一些对话框,比如文件选择,对话选择。
QFileDialog是QT中用于文件打开和文件保存的对话框。
二 代码
1.在前面的代码中,单击打开文件的按钮,会弹出提示框。
这里写图片描述
如果需要改变点击按钮做出的响应,只需要改变做出响应的函数即可。
此时,响应函数为 MainWindow::open()
2.代码改变
(1)在mainwindow.cpp中加入以下代码

void MainWindow::open(){
  QString path=QFileDialog::getOpenFileName(this,tr("open image"),".",tr("Image Files(*.jpg *.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);
  }
}

注意:需要声名QFileDialog的函数
#include<QFileDialog>
(2)程序截图如下
这里写图片描述
这里写图片描述
3.全部代码
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<QLabel>
/*前向声名,这是第一句增加的话
*/

class QAction;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void open();
private:
    //定义一个QAction类型的指针
    QAction *openAction;


};

#endif // MAINWINDOW_H

mainwindow.cpp

#include <QMenu>
#include<QMenuBar>
#include<QAction>
#include<QKeySequence>
#include<QToolBar>
#include<QStatusBar>
#include<QMessageBox>
#include<QFileDialog>
#include "mainwindow.h"


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
     QLabel *msgLabel;
    //定义openAction,设置快捷键
    openAction = new QAction(tr("&Open"), this);
    openAction->setShortcut(QKeySequence::Open);
    openAction->setStatusTip(tr("Open a file."));
    openAction->setIcon(QIcon(":/PICTURE/panda.ico"));
    connect(openAction,SIGNAL(triggered()),this,SLOT(open()));

    //往menuBar中添加menu
    QMenu *file = menuBar()->addMenu(tr("&File"));
    file->addAction(openAction);
    //添加工具栏
    QToolBar *toolBar = addToolBar(tr("&File"));
    toolBar->addAction(openAction);


//    msgLabel = new QLabel;
//    msgLabel->setMinimumSize(msgLabel->sizeHint());
//    msgLabel->setAlignment(Qt::AlignHCenter);
//    QStatusBar *statusBar =new QStatusBar();
//    statusBar->addWidget(msgLabel);
}

MainWindow::~MainWindow()
{

}
//用于实现open函数,完成点击按钮的功能
void MainWindow::open(){
  QString path=QFileDialog::getOpenFileName(this,tr("open image"),".",tr("Image Files(*.jpg *.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);
  }
}

三.知识点解释
1.QFileDialog提供了许多的静态函数用于获取用户选择的文件。

getOpenFileName

这一个函数便是其中一种,作用是获取打开的文件的文件名,函数参数比较多,且全部都是字符串,比较麻烦。
QT API中对QFileDialog的解释

QFileDialog::getOpenFileNames
(
//父窗口的指针
 QWidget *parent = Q_NULLPTR,
 //FileDialog的标题
 const QString &caption = QString(), 
 //打开文件的目录
 const QString &dir = QString(), 
 //选择的文件类型
 QString *selectedFilter = Q_NULLPTR,
 //可选参数
 Options options = Options()
 )

参数解释如下
第一个参数parent,用于指定父组件。注意,很多Qt组件的构造函数都会有这么一个parent参数,并提供一个默认值0;

第二个参数caption,是对话框的标题;

第三个参数dir,是对话框显示时默认打开的目录,”.” 代表程序运行目录,”/” 代表当前盘符的根目录(Windows,Linux下/就是根目录了),也可以是平台相关的,比如”C:\”等;

第四个参数filter,是对话框的后缀名过滤器,比如我们使用”Image Files(.jpg .png)”就让它只能显示后缀名是jpg或者png的文件。如果需要使用多个过滤器,使用”;;”分割,比如”JPEG Files(.jpg);;PNG Files(.png)”;

"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"

第五个参数selectedFilter,是默认选择的过滤器;

第六个参数options,是对话框的一些参数设定,比如只显示文件夹等等,它的取值是enum QFileDialog::Option,每个选项可以使用 | 运算组合起来。

如果我要想选择多个文件怎么办呢?Qt提供了getOpenFileNames()函数,其返回值是一个QStringList。你可以把它理解成一个只能存放QString的List,也就是STL中的list。

好了,我们已经能够选择打开文件了。保存也是类似的,QFileDialog类也提供了保存对话框的函数

实例1

  QStringList files =
  QFileDialog::getOpenFileNames(
            this,
            "Select one or more files to open",
            "/home",
            "Images (*.png *.xpm *.jpg)");

实例2

 QString path=QFileDialog::getOpenFileName(this,tr("open image"),".",tr("Image Files(*.jpg *.png)"));

2.将上个函数进行简化的方式

//设置父窗口为this窗口
QFileDialog *fileDialog = new QFileDialog(this); 
//设置Dialog的标题
fileDialog->setWindowTitle(tr("Open Image")); 
//设置文件的当前目录
fileDialog->setDirectory("."); 
//设置文件的类型
fileDialog->setFilter(tr("Image Files(*.jpg *.png)")); 
//用于判断FileDialog是否选择到一个符合要求的文件
if(fileDialog->exec() == QDialog::Accepted) { 
//获取文件的路径名  selectedFiles()[0]
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.")); 
        }

3.两种方式的区别
getOpenFileName()函数在Windows和MacOS X平台上提供的是本地的对话框,而QFileDialog提供的始终是Qt自己绘制的对话框。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值