2

我正在尝试.desktop使用 Qt QSettings 读取和编辑桌面条目文件。问题是这些文件包含多个值用分号分隔的键;。我尝试将这些阅读为 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

4

2 回答 2

2

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

变体 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()andWriteFunc()函数。

于 2015-10-11T18:56:43.620 回答
2

我觉得你做不到。QSettings对.ini文件格式有一定的解释,非常接近Windows的解释,不适合泛型解析。分号开始一个注释,并且显然QSettings允许在值之后进行注释直到行尾,而 AFAIK 没有办法解决它。

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

于 2015-10-11T19:28:34.403 回答