QSettings INI 文件:包含分号的值

QSettings INI file: value containing semicolon

我正在尝试使用 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();

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

如何 return 这些键的全部值?以及如何使用 QSettings?

将其写回

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

变体 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 的唯一 "clean" 方法。优点是您可以使用 .desktop 扩展名注册它。您必须编写一对 ReadFunc()WriteFunc() 函数。

我觉得你做不到。 QSettings 对 .ini 文件 format, which is very close to Windows interpretation, and is not meant for generic parsing. Semicolon starts a comment 有一定的解释,显然 QSettings 允许在值后注释直到行尾,据我所知没有办法绕过它。

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