QSettings INI文件:包含分号的值

时间:2015-10-11 18:44:57

标签: qt ini qsettings

我尝试使用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将其写回来?

2 个答案:

答案 0 :(得分: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()WriteFunc()函数。

答案 1 :(得分:2)

我认为你不能这样做。 QSettings对.ini文件format有一定的解释,它与Windows解释非常接近,并不适用于通用解析。分号开始comment,显然QSettings允许在值之后发表评论,直到行结束,AFAIK无法绕过它。

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