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 ...
随机推荐
- TypeScript 之 控制流分析(Control Flow Analysis)
控制流分析(Control Flow Analysis) 描述: CFA 几乎总是采用联合,基于代码逻辑去减少联合里面的类型数量. 大多数时候,CFA 在自然的JavaScript布尔逻辑中工作,但是 ...
- overflow:scroll修改样式
当overflow :scroll 出现滚动条后,默认的滚动条样式太丑了,不是我们想要的,那么我们来修改一下吧!~ 话不多说,直接上代码 /* 定义滚动条样式 */ ::-webkit-scroll ...
- vivo 服务端监控体系建设实践
作者:vivo 互联网服务器团队- Chen Ningning 本文根据"2022 vivo开发者大会"现场演讲内容整理而成. 经过几年的平台建设,vivo监控平台产品矩阵日趋完善 ...
- C++进阶(智能指针)
智能指针原理 C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理.程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的 ...
- [深度学习] imgaug库使用笔记
imgaug是一款非常有用的python图像增强库,非常值得推荐应用于深度学习图像增强.其包含许多增强技术,支持图像分类,目标检测,语义分割,热图.关键点检测等一系列任务的图像增强.本文主要介绍img ...
- Java基础学习笔记-关键字、标识符、分隔符
标识符(identifier),我的理解呢,简单来说就是一个常量或者变量的名字啦 命名规则: 只能以 字母..$ 这三种开头,后面的话就可以由字母..$和数字组成 不能用Java中的关键字 不能包含空 ...
- Object类中wait带参方法和notifyAll方法-线程间通信
Object类中wait带参方法和notifyAll方法 void wait (在其他线程调用此对象的notify()方法或notifyAll()方法前,导致当前线程等待.void wait (lo ...
- Hash table集合-练习_计算一个字符串中每个字符出现次数
Hash table集合 java.util.Hashtable<K,V>集合implements Map<K,V>接口Hashtable:底层也是一个哈希表,是一个线程安全的 ...
- continue语句-死循环
continue语句 continue 使用场景:结束本次循环,继续下一次的循环 public static void main(String[] args) { for (int i = 1; i ...
- .NET 团队 更新了 .NET 语言策略
2023年2月6日 ,.NET团队在官方博客上发布了.NET 语言策略的更新文章,具体参见 https://devblogs.microsoft.com/dotnet/update-to-the-do ...