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 仅第一个值(在我的示例中:disc
、GTK
或 application/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 文件,或者自己实现一个。
我正在尝试使用 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 仅第一个值(在我的示例中:disc
、GTK
或 application/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 文件,或者自己实现一个。