【问题标题】:QSettings INI file: value containing semicolonQSettings INI 文件:包含分号的值
【发布时间】:2016-01-09 04:50:58
【问题描述】:

我正在尝试使用 Qt QSettings 读取和编辑桌面条目.desktop 文件。问题是这些文件包含多个值的键,用分号; 分隔。我尝试将这些阅读为 QStringList 但没有运气。我只得到第一个值。例如:

Keywords=disc;cdrom;dvd;burn;audio;video;
Categories=GTK;GNOME;AudioVideo;Audio;Video;DiscBurning;
MimeType=application/x-cd-image;application/x-cdrdao-toc;application/x-cue;application/x-toc;audio/x-scpls;audio/x-ms-asx;audio/x-mp3-playlist;audio/x-mpegurl;application/x-brasero;x-content/audio-cdda;x-content/video-dvd;x-content/video-vcd;x-content/video-svcd;x-content/image-picturecd;

通过以下方式获取值:

settings.value("Desktop Entry/MimeType").toStringList();
settings.value("Desktop Entry/MimeType").toString();

仅返回第一个值(在我的示例中:discGTKapplication/x-cd-image)。

如何从这些键返回完整值?以及如何使用QSettings 将其写回?

【问题讨论】:

    标签: qt ini qsettings


    【解决方案1】:

    更新(第一次尝试完全没用)

    变体 1

    QMap<QString, QString> settings;
    QFile inFile("<input filename.ini>");
    if(inFile.open(QIODevice::ReadOnly))
    {
      QTextStream in(&inFile);
      while (!in.atEnd())
      {
        QString line = in.readLine();
        QStringList linelist = line.split("=");
        settings[linelist[0]] = linelist[1];
      }
    }
    

    变体 2

    使用QSettings::registerFormat()

    这可能是使用QSettings 的唯一“干净”方式。优点是您可以使用 .desktop 扩展名注册它。您必须编写一对ReadFunc()WriteFunc() 函数。

    【讨论】:

    • 我也在考虑类似于您在变体 1 中提出的建议。谢谢!
    【解决方案2】:

    我认为你做不到。 QSettings 对.ini 文件format 有一定的解释,非常接近Windows 的解释,不适合泛型解析。分号以comment 开头,显然QSettings 允许在值后注释直到行尾,而 AFAIK 没有办法解决它。

    您需要找到一个不同的库来处理 .desktop 文件,或者自己实现一个。

    【讨论】:

    • 我猜是这样 :( 但我认为分号仅表示行首的注释...无论如何,我会编写自己的 .desktop 文件解析器。
    • @Cornelius Wikipedia 页面(添加的链接)提到有关 cmets 的变体。但如果你想确保 QSettings 无法绕过它,源代码总是有的......
    猜你喜欢
    • 2013-04-18
    • 2015-01-07
    • 2013-09-23
    • 2012-10-15
    • 2011-05-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多