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


相关文章
QT QTreeWidget 实现模糊查询和多选的勾选状态
#QT QTreeWidget 实现模糊查询和勾选状态 本文的主要代码基本都是总结2篇博客实现了模糊查询模糊查询和勾选状态QTreeWidget实现勾选基本上所有的操作都是递归操作,个人测试了性能,如果1w项左右的数据时,没啥问题,如果有几w,那么勾选所有的,效率很慢,需要几秒钟,大家可以测试,不废话了,直接上代码:如果有啥不懂的,可以在留言,会很详细的给出解释的
544 0
vscode ctrl+/ 注释快捷键失效
首次安装vscode 不知道为何会快捷键失效,首先想到的就是键位冲突! 于是解决了。
6713 0
vscode ctrl+/ 注释快捷键失效
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
3816 4
|
编译器 程序员 C++
Qt之自定义属性Q_PROPERTY专题(1)充分理解其概念以及用途
Qt之自定义属性Q_PROPERTY专题(1)充分理解其概念以及用途
3072 0
Qt之自定义属性Q_PROPERTY专题(1)充分理解其概念以及用途
QT设置widget背景图片
该内容介绍如何在Qt中为控件添加背景图片。主要方法包括:1) 在样式表中使用`border-image`属性指定控件及其背景图片;2) 使用调色板`QPalette`设置图片,但可能导致窗口显示不下;3) 在`paintEvent`中绘制图片,适合自定义绘图但不适用于子窗口;4) 通过覆盖一个大小与窗口相同的`QLabel`来设置背景图片,可实现动态背景。推荐使用样式表设置背景,简单高效且适合子窗口。
1243 3
|
C语言
QT QtableView操作详解
本文实现了使用QtableView控件来显示数据,数据源使用txt文本作为数据源,使用了QStandardItemModel作为数据模型来实现了对TableView空间的初始化,和对txt数据源的增删改查功能。
1397 0
QT QtableView操作详解
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
1546 3
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
2727 3
|
API UED
【Qt 学习笔记】Qt窗口 | 状态栏 | QStatusBar的使用及说明
【Qt 学习笔记】Qt窗口 | 状态栏 | QStatusBar的使用及说明
2757 4

热门文章

最新文章