QFileDialog :: getSaveFileName和默认的selectedFilter

我有一些filtergetSaveFileName,我希望当用户打开“保存”对话框时select其中之一。 Qt文档说明如下:

可以通过将selectedFilter设置为所需的值来select默认的filter。

我尝试下面的变种:

QString selFilter="All files (*.*)"; QFileDialog::getSaveFileName(this,"Save file",QDir::currentPath(), "Text files (*.txt);;All files (*.*)",&selFilter); 

但是当出现对话框时,select“文本文件”filter(通常情况下,列表中的第一个filter)。 我也尝试了以下所有内容:

 selFilter="All files"; selFilter="All files (*.*)\n"; selFilter="All files (*.*);;"; selFilter="All files (*.*)\0"; 

以及这些变体的不同混合物。 我的代码中的filter列表的格式是根据文档(来自Qt文档的示例行)完成的:

 "Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)" 

请注意,输出到selFiltervariables正常工作:用户按下确定后,selFiltervariables包含用户select的filter。

平台:Linux(OpenSUSE 12.1),Qt 4.7.4,gcc 4.6.2。

那么如何设置默认filter呢?

Solutions Collecting From Web of "QFileDialog :: getSaveFileName和默认的selectedFilter"

你可以尝试这个示例应用程序,并验证,如果有任何区别。 当你在这种情况下使用直接对话框结构时,你可以更好地控制对象。

 #include <QApplication> #include <QFileDialog> int main(int argc, char **argv) { QApplication app(argc,argv); QString filters("Music files (*.mp3);;Text files (*.txt);;All files (*.*)"); QString defaultFilter("Text files (*.txt)"); /* Static method approach */ QFileDialog::getSaveFileName(0, "Save file", QDir::currentPath(), filters, &defaultFilter); /* Direct object construction approach */ QFileDialog fileDialog(0, "Save file", QDir::currentPath(), filters); fileDialog.selectNameFilter(defaultFilter); fileDialog.exec(); return 0; } 

通常这种行为是记忆腐败的一个标志。 但是,我用valgrind(我有Qt 4.8.1)检查过,FontConfig只有一些误报。

问题部分解决了,这似乎是我Qt版本(4.7.4)中的一个错误。

我写了下面的示例应用程序:

 #include <QApplication> #include <QFileDialog> int main(int argc, char **argv) { QApplication app(argc,argv); QFileDialog::getSaveFileName(0,"Save file",QDir::currentPath(), "Music files (*.mp3);;Text files (*.txt);;All files (*.*)", new QString("Text files (*.txt)")); return 0; } 

并编译为3个不同的平台:

  1. Linux(OpenSUSE 12.1),Qt 4.7.4,gcc 4.6.2
  2. Linux(CentOS),Qt 4.7.3,gcc 4.1.2
  3. MS Windows,Qt 4.8.1,gcc 4.4.0

在第一个平台上,对话框中的默认过滤器是“音乐文件”,但第二个和第三个是“文本文件”,就像它的意思。