Qt QSettings INI文件:包含分号的值
我正在尝试使用Qt QSettings读取和编辑桌面条目Qt QSettings INI文件:包含分号的值,qt,ini,qsettings,Qt,Ini,Qsettings,我正在尝试使用Qt QSettings读取和编辑桌面条目.Desktop文件。问题是这些文件包含多个值的键,这些值之间用分号分隔。我试着把这些当作英语来读,但运气不好。我只得到第一个值。例如: Keywords=disc;cdrom;dvd;burn;audio;video; Categories=GTK;GNOME;AudioVideo;Audio;Video;DiscBurning; MimeType=application/x-cd-image;application/x-cdrdao-t
.Desktop
文件。问题是这些文件包含多个值的键,这些值之间用分号分隔代码>。我试着把这些当作英语来读,但运气不好。我只得到第一个值。例如:
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();
仅返回第一个值(在我的示例中:disc
、GTK
或application/x-cd-image
)
如何从这些键返回完整值?如何使用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];
}
}
QMap设置;
QFile inFile(“”);
if(infle.open(QIODevice::ReadOnly))
{
QTextStream-in(&infle);
而(!in.atEnd())
{
QString line=in.readLine();
QStringList linelist=行。拆分(“=”);
设置[linelist[0]]=linelist[1];
}
}
变体2
使用QSettings::registerFormat()
这可能是使用QSettings
进行设置的唯一“干净”方法。优点是您可以使用.desktop扩展名注册它。您必须编写一对ReadFunc()
和WriteFunc()
函数。我想您做不到QSettings
对.ini文件有一定的解释,它与Windows解释非常接近,不适用于一般解析。分号以a开头,显然,QSettings
允许在值之后进行注释,直到行尾,而且恐怕没有办法绕过它
你需要找到一个不同的库来处理.desktop文件,或者自己实现一个。我猜是这样的:(但我相信分号只在行的开头表示注释…无论如何,我将编写自己的.desktop
文件解析器。@Cornelius Wikipedia页(添加链接)提到注释有很多变化。但是如果你想确保QSettings没有办法解决这个问题,源代码总是有的……我也在考虑类似于你在变体1中提出的东西。谢谢!