【问题标题】:How to set selected filter on QFileDialog?如何在 QFileDialog 上设置选定的过滤器?
【发布时间】:2010-12-08 22:24:12
【问题描述】:

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

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

这将显示一个对话框,其中“JPEG”被选为默认过滤器。我想按字母顺序排列过滤器列表,以便“所有文件”在列表中排在第一位。但是,如果我这样做,“所有文件”是默认选择的过滤器 - 我不想要。

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

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

【问题讨论】:

    标签: c++ qt qt4


    【解决方案1】:

    像这样:

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

    docs对此有点模糊,所以我通过猜测发现了这一点。

    【讨论】:

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

    这是所有 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)"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多