Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在QFileDialog上设置所选过滤器?_C++_Qt_Qt4 - Fatal编程技术网

C++ 如何在QFileDialog上设置所选过滤器?

C++ 如何在QFileDialog上设置所选过滤器?,c++,qt,qt4,C++,Qt,Qt4,我有一个带有三个过滤器的“打开文件”对话框: QString fileName = QFileDialog::getOpenFileName( this, title, directory, tr("JPEG (*.jpg *.jpeg);; TIFF (*.tif);; All files (*.*)") ); 这将显示一个对话框,其中选择“JPEG”作为默认过滤器。我想把过滤器列表按字母顺序排列,所以“所有文件”排在列表的第一

我有一个带有三个过滤器的“打开文件”对话框:

QString fileName = QFileDialog::getOpenFileName(
        this,
        title,
        directory,
        tr("JPEG (*.jpg *.jpeg);; TIFF (*.tif);; All files (*.*)")
);
这将显示一个对话框,其中选择“JPEG”作为默认过滤器。我想把过滤器列表按字母顺序排列,所以“所有文件”排在列表的第一位。但是,如果我这样做,“所有文件”是默认选择的过滤器-我不想要

我可以为此对话框设置默认的选定过滤器吗?还是必须使用第一个指定的过滤器

我尝试指定第五个参数(
QString
)来设置默认的选定筛选器,但这不起作用。我认为这可能只用于检索用户设置的筛选器。

如下所示:

QString selfilter = tr("JPEG (*.jpg *.jpeg)");
QString fileName = QFileDialog::getOpenFileName(
        this,
        title,
        directory,
        tr("All files (*.*);;JPEG (*.jpg *.jpeg);;TIFF (*.tif)" ),
        &selfilter 
);

关于这一点,我的答案有点模糊,所以我通过猜测发现了这一点。

这里有一个字符串,用于所有支持QT的图像格式

"All files (*.*);;BMP (*.bmp);;CUR (*.cur);;GIF (*.gif);;ICNS (*.icns);;ICO (*.ico);;JPEG (*.jpeg);;JPG (*.jpg);;PBM (*.pbm);;PGM (*.pgm);;PNG (*.png);;PPM (*.ppm);;SVG (*.svg);;SVGZ (*.svgz);;TGA (*.tga);;TIF (*.tif);;TIFF (*.tiff);;WBMP (*.wbmp);;WEBP (*.webp);;XBM (*.xbm);;XPM (*.xpm)"

这也是我提出的解决方案,但实际上我认为这是一个糟糕的API。如果要保留用户使用的最后一个筛选器,该怎么办?第5个参数是一个非常量指针,但它不会将自身更新为最后使用的筛选器字符串。您必须手动提取加载的文件扩展名,并为其构造正确的字符串。这是没有意义的,因为它是非常量的,或者有一些我没有得到的东西。一种解决方案是手动实例化QFileDialog,但感觉有点糟糕。