【问题标题】:Qt4.4 how to get the user settings pathQt4.4如何获取用户设置路径
【发布时间】:2009-03-31 12:40:45
【问题描述】:
  • linux:$HOME/.config
  • 窗口:%APPDATA%
  • mac 操作系统:$HOME/.config

可以使用http://qt-project.org/doc/qt-4.8/qsettings.html#setPath进行设置,但是好像无法找回。

http://qt-project.org/doc/qt-4.8/qlibraryinfo.html#location QLibraryInfo::LibrariesPath 返回系统范围的设置目录,这不是我想要的。

有什么想法,还是我必须为每个平台单独编码?

€:我想创建一个子目录,并将文件存储到其中。 (如果这是一个坏主意,你可以惩罚我)

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    这可能无法直接回答您的问题:如果您想存储每个用户的持久数据,您不应该改用QDesktopServices::storageLocation(QDesktopServices::DataLocation) 吗?

    【讨论】:

    • /home/user/.local/share/data// 看起来不错,尽管它似乎不是特定于 QT 的。你们中的任何人都可以在windoze上尝试一下并将结果粘贴到这里吗?那简直太好了。谢谢
    • 在 Windows XP 上,它应该类似于“C:\Document and Settings\user\Local Settings\Application Data”
    【解决方案2】:

    这是一个令人讨厌的解决方法。首先创建QSettings,然后获取它的位置。

    QSettings cfg(QSettings::IniFormat, QSettings::UserScope,
           "organization", "application");
    
    QString config_dir = QFileInfo(cfg.fileName()).absolutePath() + "/";
    

    积分转到 Qt 中心论坛。

    QSettings 将默认配置存储在用户 AppData 目录中。请参阅QSettings 的文档。此代码还指示以 Ini 文件格式存储配置。

    【讨论】:

      【解决方案3】:

      这适用于 qt 4 和 qt 5

      QApplication::setApplicationName("MyApp");
      QApplication::setOrganizationName("Me");
      
      QString homePath;
      
      #if QT_VERSION >= 0x050000
          homePath = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
      #else
          homePath = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
      #endif
      

      【讨论】:

        【解决方案4】:

        为什么需要知道设置路径?如果要在其中设置设置,可以使用QSettings。我可以看到创建一个子目录来保存各种设置,但似乎最简单的方法是直接使用QSettings

        【讨论】:

        • 这可能是兆字节的数据 - 这可能会减慢整个设置的速度。
        【解决方案5】:

        据我所知,您无法检索路径。在Qt源码src/corelib/io/qsettings.cpp中,有一个获取路径的函数:

        static QString getPath(QSettings::Format format, QSettings::Scope scope)
        {
            ...
        

        但它不能从使用 Qt 的代码中访问。你也不能复制和使用它,因为它使用内部 Qt 全局变量来存储路径...

        编辑:使用QDesktopServices.storageLocation(QDesktopServices.DataLocation) 发布了一个解决方案,但它并没有完全满足问题的要求,即如果我使用QSettings.setPath() 设置自定义路径,它不会反映更改。

        【讨论】:

          【解决方案6】:

          你在哪个平台?
          可能有关系,但在windows中,默认是写QSettings到注册表。

          【讨论】:

          • 我想在这个目录中存储文件。我已经知道它们在每个平台上的位置,但是有没有一种 qt 方式来获取这些信息?
          【解决方案7】:

          我对该问题的了解比最初发布的要多。修改后更清晰。好的,所以你不能使用..

          QString QSettings::fileName () const
          

          返回使用此QSettings 对象写入设置的路径。

          在 Windows 上,如果格式为QSettings::NativeFormat,则返回值为系统注册表路径,而不是文件路径。

          【讨论】:

          • 我不想要主目录,而是设置目录。问题中给出的示例。
          • 在对问题进行澄清编辑后,已对答案进行了编辑。
          猜你喜欢
          • 2013-04-16
          • 2017-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多