QFileDialog实现同时选择文件和文件夹,确认取消按钮英文问题解决方法
如下图所示,需求是同时能够选择文件或者文件夹,但是QFileDialog文件窗口类要么只能选文件,要么只能选文件夹,无法同时去选择文件和文件夹;

要实现这样的需求,封装了一个类,实现同时选择文件和文件夹;
头文件
#ifndef MULTIFILEDIRDIALOG_H
#define MULTIFILEDIRDIALOG_H #include <QObject>
#include <QFileDialog>
class MultiFileDirDialog : public QFileDialog
{
Q_OBJECT public:
MultiFileDirDialog(QWidget *parent);
~MultiFileDirDialog();
QStringList m_listSelect;
signals: public slots :
void go(); private: }; #endif // MULTIFILEDIRDIALOG_H
源文件
#include "MultiFileDirDialog.h"
#include<QListView>
#include <QTreeView>
#include <QDialogButtonBox>
#include <QTranslator>
#include <QPushButton>
#include <QDialogButtonBox>
#pragma execution_character_set("utf-8")
MultiFileDirDialog::MultiFileDirDialog(QWidget *parent)
: QFileDialog(parent)
{ setOption(QFileDialog::DontUseNativeDialog, true);
//支持多选
QListView *listView = findChild<QListView*>("listView");
if (listView)
listView->setSelectionMode(QAbstractItemView::ExtendedSelection);
QTreeView *treeView = findChild<QTreeView*>();
if (treeView)
treeView->setSelectionMode(QAbstractItemView::ExtendedSelection);
QDialogButtonBox *button = findChild<QDialogButtonBox *>("buttonBox"); if (button)
{
/*QPushButton* selectbutton = button->button(QDialogButtonBox::Open);
if (selectbutton)
{
button->removeButton(selectbutton);
const QString strselect = "选择";
selectbutton = button->addButton(QDialogButtonBox::Ok);
selectbutton->setText("选择");
}
QPushButton* canclebutton = button->button(QDialogButtonBox::Cancel);
if (canclebutton)
{
button->removeButton(canclebutton);
const QString strcalcel = "取消";
canclebutton=button->addButton(strcalcel, QDialogButtonBox::RejectRole);
canclebutton->setText("取消");
}*/
button->clear();
QPushButton* accpetbutton = new QPushButton(button);
accpetbutton->setText("确定");
button->addButton((QAbstractButton*)accpetbutton, QDialogButtonBox::AcceptRole);
QPushButton* cancel = new QPushButton(button);
cancel->setText("取消");
button->addButton((QAbstractButton*)cancel, QDialogButtonBox::RejectRole);
/*button->button(QDialogButtonBox::Ok)->setText(tr("确定"));
button->button(QDialogButtonBox::Cancel)->setText(tr("取消"));*/
disconnect(button, SIGNAL(accepted()), this, SLOT(accept()));//使链接失效
connect(button, SIGNAL(accepted()), this, SLOT(go()));//改成自己的槽
}
//无效
//setLabelText(QFileDialog::FileName, "选择文件:");//英文化文件名称
//setLabelText(QFileDialog::Reject, "取消");//英文化取消按钮
//setLabelText(QFileDialog::Accept, "选择");//英文化打开按钮 } MultiFileDirDialog::~MultiFileDirDialog()
{ }
void MultiFileDirDialog::go()
{
m_listSelect = selectedFiles();
QDialog::accept();
}
其中默认的取消确认按钮始终无法显示中文,所以直接将默认的按钮清除掉,再自己添加两个按钮上去,建立信号槽连接就可以了;
再需求导入选择文件的地方调用创建对象调用;
void AddVedioAnaTask::OnBtnSelectClicked()
{
//ps/ts/hik/mp4/asf/avi/dahv/flv
if (m_addType==0)//导入案件
{
m_pMultiFileDialog->setOption(QFileDialog::ShowDirsOnly, true);
//m_pMultiFileDialog->setFileMode(QFileDialog::Directory);
}
else//导入子文件
{
//m_pMultiFileDialog->setFileMode(QFileDialog::AnyFile);
m_pMultiFileDialog->setOption(QFileDialog::ShowDirsOnly, false);
m_pMultiFileDialog->setNameFilter("vedio(*.mp4 *.avi *.dav *.asf *.wmv *.mpg *.ts *.3g2 *.swf *.flv *.m2ts *.mkv *.3gp *.vob *.rmvb *.mov *.webm *.rm *.mts *.mpeg *.264 *.692 *.800 *.801 *.av *.avx *.djl *.dvr *.g64 *.h3crd *.h64 *.h264 *.ifv *.jmv *.kyd *.lvf *.mpk *.nsf *.nv4 *.ps *.rec *.sdv *.sv5 *.swf *.tm4 *.tp *.bhd *.dat *.h265 *.he4 *.m4c *.pep *.smf *.sv4 *.vdg *.601 *.452094848)");
} if (m_pMultiFileDialog->exec() == QDialog::Accepted)
{
QStringList selectFiles = m_pMultiFileDialog->selectedFiles();
if (selectFiles.size() > 0)
{
QString strItem = "";
for (int i = 0; i < selectFiles.size(); i++)
{
strItem = selectFiles[i];
if (!strItem.isEmpty())
{
if (m_TaskFileMap.find(strItem) == m_TaskFileMap.end())
{
addFileToTable(strItem);
}
} }
}
}
}
}
}
QFileDialog实现同时选择文件和文件夹,确认取消按钮英文问题解决方法的更多相关文章
- windows新建或者重命名文件及目录必须手动刷新才干显示出来问题解决方法
首先推断注冊表中HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Update\UpdateMode值是否为0,该值若为1表示手工刷新, 该 ...
- 使用shiro安全框架上传文件时用HttpSession获取ServletContext为null问题解决方法。
<!--在shiroFilter 中加入一下配置--> <init-param> <param-name>targetFilterLifecycle</par ...
- MFC 使用MFC EditBrowse Control控件选择文件或者文件夹
从工具箱中拖拽一个MFC EditBrowse Control到窗体中, 通过设置“Browse Mode”属性指定“文件浏览”还是“文件夹浏览” 可以通过添加对象的方式将其与一个CString se ...
- (WPF) 文件和文件夹选择对话框。
点击button,选择一个excel文件,并将文件名显示在textbox上. private void btnSelectErrorTableFile_Click(object sender, Rou ...
- Windows Store App JavaScript 开发:选取文件和文件夹
前面提到过,文件打开选取器由FileOpenPicker类表示,用于选取或打开文件,而文件夹选取器由FolderPicker类表示,用来选取文件夹.在FileOpenPicker类中,pickSing ...
- 如何为基于windows验证的站点的某个页面、文件或文件夹单独设置匿名访问
在MOSS的项目中,我们经常碰到要单独为基于windows验证的站点的某个页面.文件或文件夹单独设置匿名访问即不登录就可以直接访问.比如说站点的A的某些图片或文件URL存在B站点下的文件夹下.此时访问 ...
- Linux下查看文件和文件夹大小
当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力. du可以查看文件及文件夹的大小. ...
- Python(文件、文件夹压缩处理模块,shelve持久化模块,xml处理模块、ConfigParser文档配置模块、hashlib加密模块,subprocess系统交互模块 log模块)
OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目 ...
- 【转】Linux下查看文件和文件夹大小
当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力. du可以查看文件及文件夹的大小. ...
- 完美隐藏win7文件和文件夹
有没有一种方法即使使用隐藏模式也不能查看, 没错可以用上帝模式....... 啥是Win7上帝模式?不知道的看看..... <<<<<<<<<&l ...
随机推荐
- JS执行机制及ES6
一.JS执行机制 JS语言有个特点是单线程,即同一时间只能做一件事.单线程就意味着,所有的任务需要排队,前一个任务结束,才会执行后一个任务,可能造成页面渲染不连贯. 为了解决这个问题,利用多核CPU的 ...
- PhaApi NOTORM 实现分表分库
通过自增ID取模要分表的数量,便可得到表名.例如log表分成100张表:log_1,log2...,log100. 每次数据库CURD都先通过获取ID分配到相对应的表,例如:id=66,取模后的结果是 ...
- 【机器学习】李宏毅——自注意力机制(Self-attention)
前面我们所讲的模型,输入都是一个向量,但有没有可能在某些场景中输入是多个向量,即一个向量集合,并且这些向量的数目并不是固定的呢? 这一类的场景包括文字识别.语音识别.图网络等等. 那么先来考虑输出的类 ...
- 痞子衡嵌入式:低功耗&高性能边缘人工智能应用的新答案 - MCXN947
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦MCX系列MCU的新品MCXN947. 自 2015 年恩智浦和飞思卡尔合并成新恩智浦之后,关于它们各自的 Arm Cortex- ...
- 搭建漏洞环境及实战——在Windows系统中安装WAMP
安装成功之后,打开显示 链接:https://pan.baidu.com/s/1NpU7fUYOO_CSM8dNXKdnCw 提取码:mxvw
- LoadRunner11录制脚本
1.打开LoadRunner11后界面如下: 2.点击"创建/编辑脚本",会打开一个新窗口,如下: 3.这里新建一个web/html格式的测试.点击"文件"-& ...
- 13-flask博客项目之restful api详解2-使用
13-flask博客项目之restful api详解1-概念 13-flask博客项目之restful api详解1-概念 Flask-RESTful学习网站 英文:https://flask-res ...
- cs231n__5.1/5.2 CNN
CS231n note 5.1 CNN_history now: 略 5.2 CNN 上节课我们谈到了全连接层的概念: 对于全连接层而言,我们要做的就是在这些向量上进行操作. 例如: 但是至于卷积层, ...
- 基于ZR.VUE 前端的改造,页面刷新报错
问题描述: 前后端分离开发,分开部署. 页面刷新 直接报404 错误的解决办法 提示: 先在 .env.development 中 配置 VUE_APP_BASE_API , 将 '/' 替换为 后 ...
- latex文档的中文字体设置
Latex文档的中文字体设置 近日在用latex写论文时遇到了中文字体设置的问题.具体问题如下,正文字体为宋体,摘要和关键词字体为仿宋.作为latex云玩家,我马上百度了中文字体的设置方法.搜索到了如 ...