QTQuick(QML)中的文件对话框:以给定名称保存文件

QTQuick(QML)中的文件对话框:以给定名称保存文件,qt,qml,qt-quick,qtquick2,qfiledialog,Qt,Qml,Qt Quick,Qtquick2,Qfiledialog,我们正在构建一个Qt Quick应用程序,它必须能够以给定名称保存文件 在组件中,您只能设置一个目录。这对用户不是很友好,因为您不希望每次下载文件时都手动键入文件名 到目前为止,我们尝试了不同的方法 来自QtQuick的文件对话框。对话框:无法设置文件名 < > >通过QPrimFrimeDealCudioHelpEL(顽皮的私有C++ HACK)的原生对话框:Linux上不能设置文件名(GNOME) 通过静态QFileDialog::getSaveFileName()的本机对话框:在快速应用程

我们正在构建一个Qt Quick应用程序,它必须能够以给定名称保存文件

在组件中,您只能设置一个目录。这对用户不是很友好,因为您不希望每次下载文件时都手动键入文件名

到目前为止,我们尝试了不同的方法

  • 来自QtQuick的文件对话框。对话框:无法设置文件名

  • < > >通过QPrimFrimeDealCudioHelpEL(顽皮的私有C++ HACK)的原生对话框:Linux上不能设置文件名(GNOME)

  • 通过静态QFileDialog::getSaveFileName()的本机对话框:在快速应用程序中,没有可用于“父”的QWidget

  • 通过QFileDialog实例进行的QT对话:由于未设置“父级”,因此模态不起作用。在快速应用程序中,没有可用于setParent()调用的QWidget

  • (使用C++与QT 5.1和QTQuy 2.1,包括所有桌面组件)

    < P>此博客帖子涵盖了整个问题并提供了一个可能的解决方案: (里普·库洛博客)


    实现该解决方案的存储库位于此处:

    尝试将FileDialog selectExisting属性设置为false。

    我希望这仍然有用。我找到了一个至少对我有效的折衷方案。 我使用了Qt.labs.platform 1.1文件对话框QML类型:


    他使用了私有的QT头文件,当升级QT时会中断。但我没有其他机会了。我会尽量让它保持最新,因为我们在我们的软件中使用了它。在这篇文章中使用了widgets模块,所以我无法理解为什么他没有在QFileDialog上面创建一个包装器,它有selectFile method?@VALOD9我努力做到了这一点。但我没有一个QWidget可以作为家长使用。如果没有父级,模态将无法工作。由于链接已断开,请使用实现连接到原始存储库。
    FileDialog {
                id: saveDialog
                property MyClass myObj
                title: "Save Dialog"
                folder: myObjHasAPath? myObj.path: "file:///" //Here you can set your default folder
                currentFile: "file:///"+myObj.name //The name of the item that you want to save
                fileMode: Platform.FileDialog.SaveFile
            }