原文地址: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自己绘制的对话框。