Qt 应用程序有意外的 QDir::currentPath

Posted

技术标签:

【中文标题】Qt 应用程序有意外的 QDir::currentPath【英文标题】:Qt application has unexpected QDir::currentPath 【发布时间】:2018-08-07 08:57:44 【问题描述】:

我在我的 Qt 应用程序中使用QSettings 来存储首选项,一切都很好,直到我开始在 Linux mint 19 上运行它。设置文件的默认位置是应用程序文件夹,但现在它是在用户主文件夹中创建的。

QDir::currentPath() 如果我通过双击运行应用程序,则返回主文件夹,如果我从终端运行它,则返回正确的可执行位置。我以前从未见过这种情况。也许有人知道如何修复它并通过双击它自己的文件夹来运行应用程序。

【问题讨论】:

【参考方案1】:

不要依赖当前的工作目录(由QDir::currentPath() 返回),因为它基本上可以是任何东西。看起来您的桌面环境的文件管理器在您通过双击运行软件时将当前目录设置为主文件夹,这通常是明智的,因为这通常是用户在从应用程序等打开文件时想要的。

如果我正确阅读了您想要的内容,即存储设置的应用程序文件夹的路径,您需要QCoreApplication::applicationDirPath()。但请注意,这样做会强制您将应用程序安装到用户主文件夹(因为您不能写入像 /user/local/bin 这样的系统文件夹,并且您不应该通过更改权限)。

基于 cmets,似乎QCoreApplication::applicationDirPath() 给出了错误的目录,但QCoreApplication::applicationFilePath() 给出了正确的路径。如果确实如此,请获取文件路径,并从中删除可执行文件。但是,看看the Qt source,这应该是不可能的,因为applicationDirPath() 已经这样做了……


我建议您改用 QSettings 作为documented in its basic usage。

【讨论】:

如果我从文件管理器中双击运行应用程序 QCoreApplication::applicationDirPath() 返回用户主路径。而且我找不到任何关于 Nemo 文件管理器默认运行文件夹设置的信息... QCoreApplication::applicationFilePath() 返回什么? QCoreApplication::applicationFilePath() 提供正确的文件位置。我会将这种方式用作一些技巧,但应该对当前行为进行一些解释。 如果 QApplicationDirPath 和 QApplicationFilePath 给出不同的目录,这听起来像一个 Qt 错误。有趣的案例。 @kess 在 Qt 源中快速检查(编辑答案中的链接)似乎表明 applicationDirPath 使用 applicationFilePath,所以如果他们为您提供不同的路径似乎真的很奇怪......一定是其他有趣的事情开!

以上是关于Qt 应用程序有意外的 QDir::currentPath的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 中自动调整标签行的大小有意外的结果

未捕获的 SyntaxError:我的提取标头中有意外的标识符

带有 iOS 7 的 Xcode 5 中的 NSInternalInconsistencyException:“故事板:容器视图中有意外的子视图。”

QT-- MainWindow外的cpp文件调用ui

Windeployqt 部署除 exe 文件外的所有内容

QT如何获取窗口外的鼠标点击事件,或者鼠标坐标