2015-10-11 179 views
1

我正在嘗試使用Qt QSettings讀取和編輯桌面條目.desktop文件。問題是這些文件包含多個由分號分隔的值的密鑰;。我嘗試閱讀這些作爲QStringList,但沒有運氣。我只獲得第一個價值。例如:QSettings INI文件:包含分號的值

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

更新(第一嘗試是完全無用的)

變體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()函數。

+0

我也在思考類似於您在變體1中提出的建議。謝謝! – Cornelius

2

我認爲你不能這樣做。 QSettings對.ini文件format有一定的解釋,這與Windows解釋非常接近,不適用於通用解析。分號開始comment,並且顯然QSettings允許評估值直到行尾,而AFAIK則無法繞過它。

您需要找到一個不同的庫來處理.desktop文件,或者自己實現一個。

+0

我猜得如此:(但我相信分號意味着只在行的開頭註釋......無論如何,我會寫我自己的'.desktop'文件分析器 – Cornelius

+1

@Cornelius Wikipedia頁面(添加鏈接)提到,有但是如果你想確保QSettings沒有辦法解決這個問題,總會有源代碼...... – hyde