【问题标题】:QFileDialog::getOpenFileName doesn't set the initial directory on Mac OS 10.8 Mountain LionQFileDialog::getOpenFileName 没有在 Mac OS 10.8 Mountain Lion 上设置初始目录
【发布时间】:2013-04-18 03:37:10
【问题描述】:

在 Qt 4.8 中,我无法使用 QFileDialog 更改当前目录。相同的代码在 Windows 和 Mac OS 10.6 Snow Leopard 上运行良好。如果我不使用本机 Mac OS X 对话框,它也可以正常工作。

这行得通:

fn=QFileDialog::getOpenFileName(this,"Select File","/Users/myuser/Desktop",QString(),0,QFileDialog::DontUseNativeDialog);

这不起作用:

fn=QFileDialog::getOpenFileName(this,"Select File","/Users/myuser/Desktop");

看起来如果大多数时候它打开最后一次调用 getOpenFileName 的最后路径。

【问题讨论】:

    标签: macos qt qt4


    【解决方案1】:

    这是 Qt 中的一个错误,据报道已在 Qt 5.0.1 和 Qt 4.8.4 中修复(尽管它似乎仍然可以在 4.8.4 中被人们(包括我自己)重现)。

    此错误已在 JIRA 中报告为QTBUG-20771QTBUG-28161,最后是QTBUG-35779(似乎最终在 Qt 5.2.1 中完全解决了该问题)。这是Gerrit中的补丁链接。

    【讨论】:

    • 谢谢!我已经搜索了 Qt 错误跟踪器,但没有找到那些 2。
    • 在 QT 5.8 上仍然有同样的错误。
    【解决方案2】:

    在 Mavericks 上遇到了与 Qt5.2.0 相同的问题... 我找到了解决方法:将一个虚拟文件名附加到您要选择的目录中。 但是,请确保不要在 Windows 上执行此操作,因为用户会看到它。

    QString dir = "/Users/myuser/Desktop";
    #if defined(__APPLE__)
    dir += "/MyFile.txt";
    #endif
    fn = QFileDialog::getOpenFileName(this, "Select File", dir);
    

    另外,对于像我这样因为需要更多选项而实例化文件对话框的人,您也可以这样做:

    QFileDialog fileDialog(this, "Select File");
    #if defined(__APPLE__)
    fileDialog.selectFile(dir + "/MyFile.txt");
    #else
    fileDialog.setDirectory(dir);
    #endif
    ...
    

    【讨论】:

    • 在 QT 5.8 上同样的问题仍然存在。
    猜你喜欢
    • 2012-10-13
    • 2012-08-18
    • 2012-07-12
    • 2012-10-15
    • 2013-06-17
    • 1970-01-01
    • 2012-08-10
    • 2013-01-02
    • 2012-12-04
    相关资源
    最近更新 更多