如何为文件对话框过滤器设置通配符
How can I set a wildcard for a File Dialog filter?
我想设置一个文件对话框,允许 *.000 到 *.999 之间的所有文件扩展名。在幕后,我们使用QFileDialog,getOpenFileNames()函数文档似乎没有解释如何做我想做的事情(或者我想做的事情是否可行)。
我不想定义一个包含 1000 个零件的过滤器。
我知道我想要的正则表达式是"\d\d\d",但我不知道如何为过滤器定义它。
那么有没有办法做我想做的事呢?
谢谢。
QFileDialog
的行为会有所不同,具体取决于您的使用方式:
默认情况下,如果平台 有一个。在这种情况下,本来会用于 构造对话框不会被实例化,因此相关访问器 例如 layout() 和 itemDelegate() 将返回 null。
它可以使用底层操作系统本机文件对话框,并且必须为每个平台回答通配符使用问题。
或者它可以使用基于Qt小部件的界面。在这种情况下,过滤器由QFileSystemModel
处理,查看Qt代码,可以看到过滤器是使用QRegExp
和QRegExp::Wildcard
实现的。
void QFileSystemModel::setNameFilters(const QStringList &filters)
{
...
for (const auto &filter : filters)
d->nameFilters << QRegExp(filter, caseSensitive, QRegExp::Wildcard);
...
}
...
bool QFileSystemModelPrivate::passNameFilters(const QFileSystemNode *node) const
{
...
for (const auto &nameFilter : nameFilters) {
QRegExp copy = nameFilter;
if (copy.exactMatch(node->fileName))
return true;
...
}
因此,如果您可以确保不使用本机文件对话框,则可以使用通配符。为此,您可以使用QFileDialog::DontUseNativeDialog
:
fileDialog->setOption(QFileDialog::DontUseNativeDialog, true);
对于通配符语法,Qt文档中有描述。但是对于您的情况,@Scheff已经给出了答案:*.[0-9][0-9][0-9]
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 需要帮助设置在C++中使用的Potrace
- 如何在自删除后将对象设置为nullptr
- 带过滤器的现代迭代c++集合
- 将指针设置为"nullptr"并不能防止双重删除?
- 如何在Ubuntu中使用cmake设置qt4
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 如何在boost beast http请求中设置http头
- 如何使用C++获取/设置OBS中的垂直滚动过滤器属性?
- 我们无法在 Windows 10 中设置自定义密码过滤器
- 显式设置图像压缩过滤器
- 如何显示视频捕获过滤器对话框(亮度,曝光等相机设置)
- 如何为文件对话框过滤器设置通配符
- VS2017:如何在不破坏我设置的过滤器的情况下,以.vcxproj编写每个文件的选项?
- 为Boost.Log严重性记录器实例的接收设置严重性过滤器
- 如何在DirectShow应用程序中设置IVP8Encoder过滤器的比特率
- 在打开文件对话框中设置过滤器,中间有通配符(*)