【问题标题】:How to specify the QFileDialog::getExistingDirectory() method?如何指定 QFileDialog::getExistingDirectory() 方法?
【发布时间】:2012-03-25 23:29:11
【问题描述】:

使用方法/命令:

OpenCreateDirectory() 
{  
    QString Directory = QFileDialog::getExistingDirectory(this,
                        tr("Choose Or Create Directory"),
                        "/home",
                        QFileDialog::DontResolveSymlinks);
}

我可以创建一个新目录或选择一个现有目录。有没有办法禁用创建新目录的可能性?另外,有没有办法禁用选择现有目录的可能性?

更准确地说:当我使用上述方法时,会弹出一个窗口,我可以在其中创建新目录或打开现有目录。我想要做的是限制方法,这样我就可以创建一个新目录而不能只打开现有目录,或者在另一种情况下限制方法,这样我就可以打开现有目录而不能创建一个新目录。

【问题讨论】:

    标签: c++ qt directory qfiledialog


    【解决方案1】:

    您可以使用以下选项阻止创建新目录:

    QFileDialog::DontUseNativeDialog | QFileDialog::ReadOnly 
    | QFileDialog::ShowDirsOnly
    

    如果您使用本机对话框,至少在 Windows 上,选项 ReadOnly 没有任何效果。


    而对于禁用已经存在的目录的选择,你不能。
    但是您可以添加要创建的目录的名称作为单独的选项,或者检查所选目录是否不为空。

    【讨论】:

    • 这很好用。我刚刚离开了“| QFileDialog::ReadOnly | QFileDialog::ShowDirsOnly”,因为这些参数不是必需的。我接受这个答案。问候
    • 如果非本地化,您可能希望创建一个手动文件对话框屏幕?并使用setFileMode()
    • @Streight 根据 QFileDialog 源代码,ReadOnly 是禁用“newFolderButton”所必需的,并且在 Windows 上,该按钮在没有该选项的情况下启用。
    • 不幸的是,“QFileDialog::DontUseNativeDialog”是必需的。否则“新建目录”按钮仍然可见。但是,不要使用本机对话框在我的操作系统上看起来很难看。
    【解决方案2】:

    是的,您可以在创建 QFileDialog 时添加选项 QFileDialog::ReadOnly。 所以创建它:

    QString Directory = QFileDialog::getExistingDirectory(this, tr("Choose Or Create Directory"),
                                                             "/home",
                                                               QFileDialog::DontResolveSymlinks | QFileDialog::ReadOnly);
    

    文件对话框的“创建目录”按钮仍然存在,但您无法创建目录。我在 Ubuntu 上成功使用了这个功能。

    【讨论】:

    • 不幸的是不起作用。我添加了“| QFileDialog::ReadOnly”,但我仍然可以使用该方法创建一个新目录,我也在 Ubuntu 上运行它,创建按钮仍然存在,我可以使用它:D.
    • 这很奇怪......当我点击按钮时,我可以为新文件夹设置一个名称,但是当我点击输入(完成文件夹创建)时,我有一个错误消息说:“创建目录时出错:权限被拒绝”...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    相关资源
    最近更新 更多