QSettings und spezielle Zeichen

Alles rund um die Programmierung mit Qt
Antworten
Willi2793
Beiträge: 147
Registriert: 29. September 2008 10:59
Kontaktdaten:

QSettings und spezielle Zeichen

Beitrag von Willi2793 »

Hallo,

ich bin ziemlich neu in QT. Ich möchte eine INI-Datei auslesen und habe das auch leidlich mit QSettings geschafft. Ich kann mich auch damit abfinden das der Backslash ("\") innerhalb eines Keys Probleme macht.

aber ist es nicht möglich ";" (Semikolon) oder "," (Komma) in einem Key zu verwenden? Bei einem Semikolon wird der Key nur bis genau dahin gelesen und bei einem Komma wird der gesamte Key ignoriert.

Ist das änderbar und wenn ja, wie?

Danke und Grüße,
Willi
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Du schreibst Daten mit QSettings und kannst sie später nicht mehr damit einlesen? Oder möchtest Du eine nicht mit QSettings erstellt ini-Datei einlesen?
Die von Dir erwähnten Zeichen müssen escaped werden damit sie korrekt als Zeichen und nicht als Separator usw. erkannt werden.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Willi2793
Beiträge: 147
Registriert: 29. September 2008 10:59
Kontaktdaten:

Beitrag von Willi2793 »

Die Dateien werden nicht mit QSettings erstellt. Wo kann ich denn eine Liste aller zeichen finden die escaped werden müssen?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn in der QSettgins-Doku nichts steht wüsste ich nicht wo - da hilft dann wohl nur probieren.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

spannend... ich dachte bisher immer, dass nur nur (back)slash betroffen sind:
Do not use slashes ('/' and '\') in key names; the backslash character is used to separate sub keys (see below). On windows '\' are converted by QSettings to '/', which makes them identical.
Alle weiteren Zeichen sind IMHO Bugs..
wie z.B.
http://trolltech.com/developer/task-tra ... &id=131818
Willi2793
Beiträge: 147
Registriert: 29. September 2008 10:59
Kontaktdaten:

Beitrag von Willi2793 »

solarix hat geschrieben:spannend... ich dachte bisher immer, dass nur nur (back)slash betroffen sind:
Do not use slashes ('/' and '\') in key names; the backslash character is used to separate sub keys (see below). On windows '\' are converted by QSettings to '/', which makes them identical.
Alle weiteren Zeichen sind IMHO Bugs..
wie z.B.
http://trolltech.com/developer/task-tra ... &id=131818
Hm, ich nutze aber 4.4 und da ist der Bug mit dem Semikolon immer noch (oder wieder?) vorhanden? Und das mit dem Komma finde ich noch verwunderlicher. Sollte ich da einen Bug melden?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Erstmal ein Testcase schreiben und schauen was passiert wenn Du ein Semikolion/Komm sepicherst.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Willi2793
Beiträge: 147
Registriert: 29. September 2008 10:59
Kontaktdaten:

Beitrag von Willi2793 »

Wieso speichern? Ich will es nur lesen! Die Dateien werden manuell erstellt, sprich: nicht über QSettings.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn man ein Semikolion speichert und dann wieder lädt sieht man ja wohl wie Qt das abspeichert und ob es korrekt geladen wird. Testcase eben.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Also

Code: Alles auswählen

#include <QCoreApplication>
#include <QSettings>
#include <QDebug>

int main(int argc, char *argv[])
{
  QCoreApplication::setOrganizationName("MySoft");
  QCoreApplication::setOrganizationDomain("mysoft.com");
  QCoreApplication::setApplicationName("Star Runner");

  {
    QSettings settings;
    settings.setValue("test;1", ";string;test");
    settings.setValue("test,2", ",string,test");
  }

  {
    QSettings settings;
    qDebug() << settings.value("test;1");
    qDebug() << settings.value("test,2");
  }
}
funktioniert einwandfrei... in der Config-File wird

Code: Alles auswählen

[General]
test%2C2=",string,test"
test1="string;test"
test2="string,test"
test%3B1=";string;test"
eingetragen... ich denke jetzt ist klar, wie du die Daten zu speichern hast..
Willi2793
Beiträge: 147
Registriert: 29. September 2008 10:59
Kontaktdaten:

Beitrag von Willi2793 »

Vielen Dank!

Hatte heute im Zug auch die Gelegenheit das zu testen und bin erstaunlicher Weise zum selben Ergebnis gekommen :)

Meine beiden Probleme können also geschlossen werden. :)
Antworten