我想设置一个文件对话框,允许所有文件扩展名在* .000到* .999之间。在幕后,我们正在使用QFileDialog,并且getOpenFileNames()函数文档似乎没有解释如何做我想要的(或者如果我想要做的话甚至是可能的。
我不想定义1000个部件的过滤器。
我知道我想要的正则表达式是“\ d \ d \ d”,但我不知道如何为过滤器定义。
那么有办法做我想要的吗?
感谢。
答案 0 :(得分:1)
QFileDialog
的行为会有所不同,具体取决于您的使用方式:
默认情况下,如果平台将使用平台本机文件对话框 有一个。在这种情况下,否则将使用的小部件 构造对话框不会被实例化,所以相关的访问器 例如layout()和itemDelegate()将返回null。
它可以使用底层的OS本机文件对话框,并且必须为每个平台回答通配符使用的问题。
或者它可以使用基于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 documentation中有说明。但是对于你的情况,答案已经由@Scheff给出:*.[0-9][0-9][0-9]