【问题标题】:qt program deployed on mac. config file not writing when standalone app launched, works when run from within qt creatorqt程序部署在mac上。独立应用程序启动时配置文件不写入,从 qt creator 中运行时有效
【发布时间】:2015-06-02 09:14:39
【问题描述】:

我有一个为 mac osx 开发的程序。当程序从 Qt creator 中运行时,会在 myapp.app/Contents/MacOS 文件夹中创建一个日志文件和一个 config.cfg 文件,以及可执行文件。这是正确的行为,程序需要这些文件。

当我部署应用程序以独立运行(通过使用 macdeploymentqt 工具链接所需的库)时,应用程序启动并正确运行,但是日志和 config.cfg 文件不会写入 myapp.app/Contents/MacOS 文件夹和因此无法读取设置。

有没有办法解决这个问题?有没有人遇到过这种情况?

米奇

【问题讨论】:

  • 你确定这就是你想要的吗?不鼓励写入您自己的应用程序包,并且可能会被系统阻止。
  • 这个程序也可以在 Windows 上运行,当它在那里实现时,config.cfg 会被写入包含可执行文件和所需 .dll 文件的文件夹中。为 mac 编译时会有等价物吗?

标签: macos qt deployment config logfile


【解决方案1】:

出于安全原因,osx 可能不允许您在已安装的应用程序上写入捆绑包位置,并且在多个用户使用您的应用程序时可能会发生冲突。

要跨平台,您可以改为:

QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation)

解析为

~/Library/Application Support/<APPNAME>

C:/Users/<USER>/AppData/Local/<APPNAME>

或 Windows 上的等效项。

【讨论】:

  • 谢谢!我已经查看了 QStandardPaths 的文档,但我对实现仍然有些困惑。我想使用 DocumentsLocation 文件夹(因为它需要是一个易于用户访问的文件夹)。我想在文档文件夹中创建一个文件夹,当我尝试类似 currentPath = QStandardPaths::DocumentsLocation+"/MP512";路径只有 MP512,有什么想法吗?
  • 我已经让它有点工作了。通过使用 QString path = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation); currentPath = 路径+"/MP512";它将返回正确的目录,但不会创建该文件夹。程序去那里写文件的时候会自动创建吗?
【解决方案2】:

您永远不应该写入应用程序包,无论是在 Mac 上还是在 Windows 上。即使在 Windows 上,如果您的用户不是管理员,它也不会工作。这个想法最后在 Windows 95 上是有意义的——甚至在 Windows NT 上也是如此。不要这样做。

【讨论】:

    猜你喜欢
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    • 2011-11-16
    • 2016-04-23
    相关资源
    最近更新 更多