【问题标题】:Qt Multiple file filters, force one extensionQt 多个文件过滤器,强制一个扩展名
【发布时间】:2016-05-30 21:13:49
【问题描述】:

在用于保存文件的 Qt 对话框中,我有多个文件过滤器选项。

例如,我的过滤器是"Text Files (*.txt, *.pdf);;TXT Files (*.txt);;PDF files(*.pdf)"

这是我的代码:

QFileDialog dialog(this);
dialog.setFileMode(QFileDialog::AnyFile);
dialog.setNameFilter(filter.c_str());
dialog.setAcceptMode( QFileDialog::AcceptSave );
dialog.setWindowTitle(WINDOW_TITLE_EXPORT_CLOUD);
if (!dialog.exec())
    return;

QString fileName;
auto    fileName = dialog.selectedFiles().at(0);

现在,用户可能不会引入文件扩展名,因此对话框应负责根据所选文件过滤器强制一个。

对于多个扩展的情况,我可以使用QDialog::setDefaultSuffix(),但这还不够,因为如果我将默认后缀设置为,例如,.pdf,用户可以选择TXT files (*.txt)过滤器,我会覆盖用户的决定。

如何根据所选过滤器强制文件扩展名?

谢谢


还有QFileDialod::selectedNameFilter(),但基于此我的代码将迫使我事后检查文件是否存在,以免覆盖 (Is there a way to automatically add extensions to a file using QFileDialog on Linux)

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    你只能事后做。

    您可以获取selectedNameFilter。 然后您应该检查所选文件名是否与selectedNameFilter具有相同的扩展名。

    如果不相同,可以选择添加,或者更改扩展名。

    【讨论】:

    • 这个问题是如果文件存在扩展名已更改,我将不得不调用默认的“覆盖”对话框。
    • 这是不自动添加文件扩展名的一个很好的理由。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2010-12-31
    相关资源
    最近更新 更多