7

我有一些带有一些过滤器的 getSaveFileName,我希望在用户打开“保存”对话框时选择其中一个。Qt 文档说明如下:

可以通过将 selectedFilter 设置为所需的值来选择默认过滤器。

我尝试以下变体:

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

但是当对话框出现时,“文本文件”过滤器(通常是列表中的第一个过滤器)被选中。我还尝试了以下所有方法:

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

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

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

请注意,selFilter 变量的输出正常工作:用户按 OK 后,selFilter 变量包含用户选择的过滤器。

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

那么如何设置默认过滤器呢?!

4

2 回答 2

1

您可以尝试此示例应用程序并验证它是否有任何不同。当您在这种情况下使用直接对话构造时,您可以更好地控制对象。

#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 只有一些误报。

于 2012-09-23T08:54:08.797 回答
0

问题部分解决了,这似乎是我的 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. 微软视窗,Qt 4.8.1,gcc 4.4.0

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

于 2012-09-23T07:28:38.033 回答