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允许选择同时选择多个文件和多个文件夹,也可以只选一个文件或一个文件夹 - 开发者知识库  


相关文章
|
1天前
|
Linux
文件夹
每个文件和文件夹都有一个所有者,这是创建该文件或文件夹的用户。所有者拥有最高的权限,可以对文件和文件夹进行更改、读取和删除。群组是一组用户,他们可以共享文件和文件夹的权限。其他用户是除所有者和群组以外的其他用户。 Linux使用三个主要的权限:读、写和执行。读权限允许用户查看文件或文件夹的内容,写权限允许用户更改文件或文件夹的内容,执行权限允许用户运行文件或文件夹中的程序。是一种控制用户和程序对文件和文件夹的访问的方法。它使用三个主要的概念:所有者(owner)、群组(group)和其他(others)每个文件和文件夹都有一个所有者,这是创建该文件或文件夹的用户。所有者拥有最高的权限,可以对文
11 2
|
1月前
|
Linux
每个文件和文件夹
每个文件和文件夹都有一个所有者,这是创建该文件或文件夹的用户。所有者拥有最高的权限,可以对文件和文件夹进行更改、读取和删除。群组是一组用户,他们可以共享文件和文件夹的权限。其他用户是除所有者和群组以外的其他用户。 Linux使用三个主要的权限:读、写和执行。读权限允许用户查看文件或文件夹的内容,写权限允许用户更改文件或文件夹的内容,执行权限允许用户运行文件或文件夹中的程序。是一种控制用户和程序对文件和文件夹的访问的方法。它使用三个主要的概念:所有者(owner)、群组(group)和其他(others)每个文件和文件夹都有一个所有者,这是创建该文件或文件夹的用户。所有者拥有最高的权限,可以对文
39 5
|
2月前
|
Linux
文件或文件夹
每个文件和文件夹都有一个所有者,这是创建该文件或文件夹的用户。所有者拥有最高的权限,可以对文件和文件夹进行更改、读取和删除。群组是一组用户,他们可以共享文件和文件夹的权限。其他用户是除所有者和群组以外的其他用户。 Linux使用三个主要的权限:读、写和执行。读权限允许用户查看文件或文件夹的内容,写权限允许用户更改文件或文件夹的内容,执行权限允许用户运行文件或文件夹中的程序。是一种控制用户和程序对文件和文件夹的访问的方法。它使用三个主要的概念:所有者(owner)、群组(group)和其他(others)每个文件和文件夹都有一个所有者,这是创建该文件或文件夹的用户。所有者拥有最高的权限,可以对文
34 0
|
2月前
|
Linux
文件和文件夹
拥有最高的权限,可以对文 每个文件和文件夹都有一个所有者,这是创建该文件或文件夹的用户。所有者拥有最高的权限,可以对文件和文件夹进行更改、读取和删除。群组是一组用户,他们可以共享文件和文件夹的权限。其他用户是除所有者和群组以外的其他用户。 Linux使用三个主要的权限:读、写和执行。读权限允许用户查看文件或文件夹的内容,写权限允许用户更改文件或文件夹的内容,执行权限允许用户运行文件或文件夹中的程序。是一种控制用户和程序对文件和文件夹的访问的方法。它使用三个主要的概念:所有者(owner)、群组(group)和其他(others)每个文件和文件夹都有一个所有者,这是创建该文件或文件夹的用户
34 0
|
3月前
|
Python
获取文件夹文件
这是一个使用Python 3.10+的简单程序,依赖`NStudyPy`库,通过`PyFile.get_file_list()`函数获取指定文件夹及其子目录(可选)中的文件列表。核心函数`get_file_list()`接受路径和一个布尔值,决定是否递归搜索。如果路径不存在或不是目录,会抛出错误。返回值是包含所有文件路径的列表。
36 1
|
3月前
|
Linux
和文件夹
拥有最高的权限,可以对文 每个文件和文件夹都有一个所有者,这是创建该文件或文件夹的用户。所有者拥有最高的权限,可以对文件和文件夹进行更改、读取和删除。群组是一组用户,他们可以共享文件和文件夹的权限。其他用户是除所有者和群组以外的其他用户。 Linux使用三个主要的权限:读、写和执行。读权限允许用户查看文件或文件夹的内容,写权限允许用户更改文件或文件夹的内容,执行权限允许用户运行文件或文件夹中的程序。是一种控制用户和程序对文件和文件夹的访问的方法。它使用三个主要的概念:所有者(owner)、群组(group)和其他(others)每个文件和文件夹都有一个所有者,这是创建该文件或文件夹的用户。所
16 0
|
前端开发 C++
【Qt】实现显示指定路径目录结构
使用 Qt 的 QTreeView 显示指定路径下的目录结构
481 0
从零开始学Pyqt5之【控件介绍】(14):QFileDialog文件选择对话框控件
从零开始学Pyqt5之【控件介绍】(14):QFileDialog文件选择对话框控件
从零开始学Pyqt5之【控件介绍】(14):QFileDialog文件选择对话框控件
QT应用编程: 半透明遮罩窗口实现
QT应用编程: 半透明遮罩窗口实现
510 0
QT应用编程: 半透明遮罩窗口实现
|
编译器 Linux API
QT应用编程: 基于mdk-sdk开发视频播放器
QT应用编程: 基于mdk-sdk开发视频播放器
559 0
QT应用编程: 基于mdk-sdk开发视频播放器