QFileDialog可同时选择文件/目录和文件夹

简介: QFileDialog可同时选择文件/目录和文件夹

1. QT文档中说明,正常是不提供同时选择目录和文件夹功能的

The QFileDialog class enables a user to traverse the file system in order to select one or many files or a directory.

2. 实现思路:我们可以重写一个类(CMyFileDialog)来继承QFileDialog,在调用时,利用QTreeView和QListView的组合使用来达到最终可同事选择目录和文件的目的,具体代码如下:


3. 具体代码

#这是CMyFileDialog.h
#ifndef CMYFILEDIALOG_H
#define CMYFILEDIALOG_H
#include <QFileDialog>
#include <QWidget>
#include <QFileDialog>
#include <QListView>
#include <QTreeView>
#include <QDialogButtonBox>
class CMyFileDialog : public QFileDialog
{
    Q_OBJECT
public:
    explicit CMyFileDialog(QWidget *parent = nullptr);
public slots:
    void slot_myAccetp();
signals:
};
#endif // CMYFILEDIALOG_H
#这是CMyFileDialog.cpp
#include "MyFileDialog.h"
CMyFileDialog::CMyFileDialog(QWidget *parent) : QFileDialog(parent)
{
}
void CMyFileDialog::slot_myAccetp()
{
    QDialog::accept();
}
#调用MyDiaog的类
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include "MyFileDialog.h"
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}
Widget::~Widget()
{
    delete ui;
}
void Widget::on_pushButton_clicked()
{
    CMyFileDialog *dialog =new CMyFileDialog(this);
    dialog->setOption(QFileDialog::DontUseNativeDialog,true);
    //支持多选
    QListView *listView = dialog->findChild<QListView*>("listView");
    if (listView)
        listView->setSelectionMode(QAbstractItemView::ExtendedSelection);
    QTreeView *treeView = dialog->findChild<QTreeView*>();
    if (treeView)
        treeView->setSelectionMode(QAbstractItemView::ExtendedSelection);
    QDialogButtonBox *button = dialog->findChild<QDialogButtonBox *>("buttonBox");
    disconnect(button,SIGNAL(accepted()),dialog,SLOT(accept()));//使链接失效
    connect(button,SIGNAL(accepted()),dialog,SLOT(slot_myAccetp()));//改成自己的槽
    if(dialog->exec()==QDialog::Accepted)
    {
        qDebug()<<dialog->selectedFiles();
    }
}


4. 实现效果


我是在一个按钮的点击效果中调用的CMyFileDialog,选中目录或文件,打印路径。


点击按钮:


1.png


选择一个文件夹,点击右下角Open:


1.png


打印:


1.png


选择一个文件,点击Open:

1.png

打印:


1.png


参考:


QT QFileDialog允许选择同时选择多个文件和多个文件夹,也可以只选一个文件或一个文件夹 - 开发者知识库  


相关文章
|
6月前
|
Python
获取文件夹文件
这是一个使用Python 3.10+的简单程序,依赖`NStudyPy`库,通过`PyFile.get_file_list()`函数获取指定文件夹及其子目录(可选)中的文件列表。核心函数`get_file_list()`接受路径和一个布尔值,决定是否递归搜索。如果路径不存在或不是目录,会抛出错误。返回值是包含所有文件路径的列表。
59 1
C# 获取本机系统特殊文件夹路径
C# 获取本机系统特殊文件夹路径
C# 获取本机系统特殊文件夹路径
C#编程-116:获取指定目录下的所有文件及文件夹
C#编程-116:获取指定目录下的所有文件及文件夹
607 0
C#编程-30:创建文件或文件夹
C#编程-30:创建文件或文件夹
265 0
|
开发框架 .NET Windows
文件和文件夹的操作——获取当前路径方法
文件和文件夹的操作——获取当前路径方法
281 0
MFC删除某个文件夹下的所有目录文件
1、该函数是删除文件夹下的所有文件 http://bbs.csdn.net/topics/390448664 BOOL CMainFrame::DeleteDirectory(con...
1849 0