2015-10-11 3 views
1

Я пытаюсь прочитать и отредактировать файл рабочего стола .desktop с помощью Qt QSettings. Проблема в том, что эти файлы содержат ключи с несколькими значениями, разделенные точкой с запятой ;. Я пробовал читать их как 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(); 

возвращает только первое значение (в моем примере: disc, GTK или application/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 Страница Википедии (добавленная ссылка) упоминает, что есть варианты комментариев. Но если вы хотите убедиться, что с QSettings нет никакого пути, всегда есть исходный код ... – hyde

Смежные вопросы