QT 标准对话框-QFileDialog

在很多软件中都有打开某个路径下文件的需求,刚刚开始对于新人来说,可能会有疑问这里是不是还要自己写一个文件对话框,用来展示和获得文件路径;很显然Qt自身就给你提供了这样的构件,直间调用就可以实现。

QFileDialog:
提供了允许用户选择文件或者目录的对话框。 其父类为 QDialog
参考之前QMessageBox的例子:
1、使用QFileDialog可以直接调用其静态公有函数
2、使用自定义的函数构造对话框的各个细节

方案一:
根据帮助文档提供的线索,看一下各个静态的公有函数是跟什么用的:
(1) getExistingDirectory  只获取文件夹
(2) getExistingDirectoryUrl  
和getExistingDirectory类似,功能也是获取文件夹路径,最大的区别在于参数里的路径是QUrl类型,这为用户提供了选择远程目录的能力。
(3) getOpenFileName  获取本地文件 
(4)getOpenFileUrl  获取远程文件,为用户提供了获取远程文件路径的能力
(5) getOpenFileUrls  获取多个远程文件,可以得到多个远程文件路径
(6)getOpenFileNames  获取多个本地文件
(7)getSaveFileName 保存本地文件对话框
(8)getSaveFileUrl 保存远程文件对话框

方案二:
先构造一个QFileDialog对象:
QFileDialog fd;

  • 设置是打开还是保存文件对话框 AcceptMode(2个枚举)
fd.setAcceptMode(QFileDialog::AcceptOpen); //文件对话框为打开类型 fd.setAcceptMode(QFileDialog::AcceptSave); //文件对话框为保存类型

  • 设置对话框显示信息的详细程度(2个枚举)
fd.setViewMode(QFileDialog::Detail); //详细 fd.setViewMode(QFileDialog::List); //仅列表

  • 设置点击OK后,对话框返回什么(4个枚举)
fd.setFileMode(QFileDialog::AnyFile); //文件名,无论是否存在 fd.setFileMode(QFileDialog::ExistingFile); //存在的,单个文件名 fd.setFileMode(QFileDialog::Directory); //文件夹名 fd.setFileMode(QFileDialog::ExistingFiles); //多文件

  • 设置标题
fd .setWindowTitle ( "标题" ) ;

  • 设置默认后缀
fd .setDefaultSuffix ( "txt" ) ;

上面除了还有个Option没写以外,其他都是Properties,下面开始讲公共函数。
  • 获取对话框中的目录地址
QDir dir = fd.directory();qDebug() << dir ; //如果要获取远程目录,则用QDir dir = fd.directoryUrl();
  • 设置QDir::filter过滤器
fd .setFilter (QDir::AllDirs) ; qDebug() << fd .filter () ;

这里的QDir::filter过滤器和对话框右下角(*.txt)过滤器不一样,QDir::filter过滤器有16个枚举,如下:
ConstantValueDescription
QDir::Dirs0x001列出匹配filters的目录
QDir::AllDirs0x400列出所有目录
QDir::Files0x002列出所有文件
QDir::Drives0x004列出磁盘驱动器(Unix系统忽略)
QDir::NoSymLinks0x008不列出符号连接
QDir::NoDotAndDotDotNoDot or NoDotDot不列出特殊条目,如“.”或者“..”
QDir::NoDot0x2000不列出“.”
QDir::NoDotDot0x4000不列出“..”
QDir::AllEntriesDirs\Files\Drives列出目录、驱动盘、符号连接
QDir::Readable0x010列出程序有读权限的文件。可读值需配合Dirs和Files
QDir::Writable0x020列出程序有写权限的文件。可读值需配合Dirs和Files
QDir::Executable0x040列出程序有运行权限的文件。可读值需配合Dirs和Files
QDir::Modified0x080只列出已修改的文件(Unix系统忽略)
QDir::Hidden0x100列出隐藏文件(Unix系统以“.”开头)
QDir::System0x200列出系统文件
QDir::CaseSensitive0x800过滤器应区分大小写


  • 返回文件图标提供者 
QFileIconProvider * QFileDialog::iconProvider() const 
这个就是关于文件等图标的函数,用这个函数可以获得是谁提供了这些图标的。当然系统图标也可以自己设置。
  • 返回委托 
QAbstractItemDelegate * QFileDialog::itemDelegate() const 
返回列表项目的delegate(委托),这些委托用来提供对话框视图中的项目。
  • 设置对话框中的文字标签 
在对话框中可以设置的文字标签共有5处,如下图: 
这里写图片描述

  • 设置多个对话框右下角的文件过滤器
QStringList filters;filters << "Image files (*.png *.xpm *.jpg)" << "Text files (*.txt)" << "Any files (*)" ;fd.setNameFilters(filters); //就是这个函数咯


例程:

myfiledialogdemo.CPP 文件:


#include "myfiledialogdemo.h"
#include <QPushButton>
#include <QFileDialog>
#include <QDebug>
#include <QStringList>

MyFileDialogDemo::MyFileDialogDemo(QWidget *parent) :
    QWidget(parent)
{
    QPushButton* pBtn = new QPushButton("OPen", this);
    QPushButton* pBtns = new QPushButton("打开多个", this);
    QPushButton* pBtnDir = new QPushButton("打开文件夹", this);
    QPushButton* pBtn1 = new QPushButton("打开自定义",this);

    pBtn->setGeometry(0,40,80,25);//前两个参数时坐标,后两个参数是宽,长
    pBtns->setGeometry(100, 40, 80, 25);
    pBtnDir->setGeometry(0, 0, 90, 25);
    pBtn1->setGeometry(100, 0, 90, 25);

    connect(pBtn, &QPushButton::clicked,
            [=]()
            {
                //静态公有函数实现
                QString strPath = QFileDialog::getOpenFileName(NULL,
                                                               QString("Open"),
                                                               QString("../../"),
                                                                tr("image(*.png *.jpg);;souce(*.h *.cpp);;Text(*.txt);;all(*.*)")//过滤文件格式
                                                               );
                qDebug()<<strPath;
              }
             );
    connect(pBtns, &QPushButton::clicked, this, &MyFileDialogDemo::slotFileDemo1);
    connect(pBtnDir, &QPushButton::clicked, this, &MyFileDialogDemo::slotFileDemo2);
    connect(pBtn1, &QPushButton::clicked, this, &MyFileDialogDemo::slotFileDemo3);
}

MyFileDialogDemo::~MyFileDialogDemo()
{

}

void MyFileDialogDemo::slotFileDemo1()
{
    QStringList filePaths = QFileDialog::getOpenFileNames(this,
                                                          "open",
                                                          "../../",
                                                          tr("Text(*.txt *.h *.cpp);; Image(*.jpg *.png *.icon)")
                                                          );
    int count = filePaths.length();
    for(int i = 0; i < count; i++ )
    {
        qDebug()<<filePaths.at(i);
    }

}

void MyFileDialogDemo::slotFileDemo2()
{
    QString dirPath = QFileDialog::getExistingDirectory(this,
                                                        QString(tr("打开文件夹")),
                                                        QString("../")
                                                        );
    qDebug()<<dirPath;
}


void MyFileDialogDemo::slotFileDemo3()
{
    //自定义
    QFileDialog fd;
    QStringList filters;
    filters << "Image files (*.png *.xpm *.jpg)"
            << "Text files (*.txt)"
            << "Any files (*)";

    fd.setNameFilters(filters);//就是这个函数咯
    fd.setAcceptMode(QFileDialog::AcceptOpen);
    fd.setViewMode(QFileDialog::Detail);
    fd.setFileMode(QFileDialog::AnyFile);//对话框返回值
    fd.setWindowTitle("open");
    fd.exec();

}

myfiledialogdemo .h:

#ifndef MYFILEDIALOGDEMO_H
#define MYFILEDIALOGDEMO_H

#include <QWidget>


class MyFileDialogDemo : public QWidget
{
    Q_OBJECT

public:
    explicit MyFileDialogDemo(QWidget *parent = 0);
    ~MyFileDialogDemo();


    void slotFileDemo1();//QT5中槽函数可以是普通函数不需要用关键字修饰
private slots:
    void slotFileDemo2();//Qt4中需要被slots关键字修饰
    void slotFileDemo3();


};

#endif // MYFILEDIALOGDEMO_H



写在最后欢迎大家指正,一起交流学习:QQ:1106594334

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt6对话框QFileDialog是用于在Qt6应用程序中打开和保存文件的对话框。根据引用[1]和引用的内容,我们可以使用以下两种方式来实现对话框的使用: 方式一:使用静态函数QFileDialog::getOpenFileName() 可以通过以下代码示例使用静态函数QFileDialog::getOpenFileName()来实现: ```cpp QString fileName = QFileDialog::getOpenFileName(this, tr("文件打开对话框"), "D:", tr("图片文件(*png *jpg)")); ``` 在这个示例中,我们通过调用静态函数QFileDialog::getOpenFileName()来实现文件的打开对话框。通过传递窗口的指针、对话框的标题、默认目录和文件过滤器等参数,我们可以获取用户选择的文件名。 方式二:创建QFileDialog对象来实现 可以通过以下代码示例创建QFileDialog对象来实现: ```cpp QFileDialog *filedialog = new QFileDialog(this);//创建文件对话框对象,父对象为this filedialog->setWindowTitle("Save");//设置对话框标题 filedialog->setAcceptMode(QFileDialog::AcceptSave);//设置对话框为保存模式 filedialog->setFileMode(QFileDialog::AnyFile);//设置文件对话框的模式 filedialog->setViewMode(QFileDialog::Detail);//设置文件视图模式为详细模式 filedialog->selectFile("data.txt");//设置初始选中的文件为“data.txt” filedialog->setFilter("*.csv;;*txt;;*.*");//设置文件过滤器 filedialog->selectNameFilter("*.csv");//设置初始选择的文件类型 if (filedialog->exec() == QFileDialog::AcceptSave) { QString path = filedialog->selectedFiles()[0]; QFile file(path); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { QString filePathToRead = "test.txt";//已存在的文件test.txt QFile readFile(filePathToRead); if (readFile.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream in(&readFile); QTextStream out(&file); out << in.readAll(); readFile.close(); file.close(); } } } ``` 在这个示例中,我们通过创建QFileDialog对象,设置对话框的标题、模式、视图模式、初始选中的文件、文件过滤器等属性来实现文件的保存对话框。然后,通过调用exec()函数来显示对话框,并根据用户的选择进行相应的操作。 以上是两种实现Qt6对话框QFileDialog的方式,你可以根据需要选择其中一种方式来在Qt6应用程序中使用QFileDialog

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值