Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QSettings INI文件:包含分号的值_Qt_Ini_Qsettings - Fatal编程技术网

Qt QSettings INI文件:包含分号的值

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

我正在尝试使用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-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中提出的东西。谢谢!