Seite 1 von 1

[gelöst] Ganze Gruppe in Settings entfernen

Verfasst: 13. Januar 2010 17:01
von hs60
Ich versuche mit folgendem Code

Code: Alles auswählen

  settings.beginGroup(ProjektName);
  settings.remove("");
  settings.endGroup();
eine gesamte Gruppe in den Settings zu entfernen.

Dies funktioniert zwar, nur wird nicht nur die übergebene Gruppe, sondern der gesamte Inhalt des settings gelöscht. Was mache ich hier falsch?

mfg
Herbert

Verfasst: 13. Januar 2010 17:08
von upsala

Code: Alles auswählen

   settings.remove(ProjektName); 

Verfasst: 13. Januar 2010 17:21
von hs60
Vielen Dank für die rasche Antwort.

Habe dies soeben versucht, leider ohne Erfolg. Es wird auch hier der gesamte Inhalt der settings-datei gelöscht.

Ich verwende übrigens Qt 4.6

Hat vielleich noch jemand eine Idee oder handelt es sich hier um einen Bug?

mfg
Herbert

Verfasst: 14. Januar 2010 09:23
von hs60
Nachdem keine weitere Meldung mehr gekommen ist, muß ich davon ausgehen, daß es sich um einen Bug in Qt 4.6 handelt.

mfg
Herbert

Verfasst: 14. Januar 2010 10:13
von AuE
If key is an empty string, all keys in the current group() are removed. For example:

QSettings settings;
settings.setValue("ape");
settings.setValue("monkey", 1);
settings.setValue("monkey/sea", 2);
settings.setValue("monkey/doe", 4);

settings.beginGroup("monkey");
settings.remove("");
settings.endGroup();

QStringList keys = settings.allKeys();
// keys: ["ape"]

Klappt bei mir super! Ist also kein qt bug

Verfasst: 14. Januar 2010 11:32
von hs60
jaja, das klappt bei mir auch.

Nur - versuche mal, die Gruppe als Variable zu übergeben, das klappt dann nicht mehr. Als String unter Anführungszeichen funktioniert es, als Variable nicht mehr.

mfg
Herbert

Verfasst: 14. Januar 2010 11:49
von AuE
Debugge mal deine Variable ;-)

Code: Alles auswählen

    QString myGroupToDelete = "deleteme";

    QSettings settings(qApp->applicationDirPath() + "/myIni.ini", QSettings::IniFormat,this);

    qDebug() <<"Keys before deleting" << settings.allKeys();
    if(settings.childGroups().contains(myGroupToDelete))
	    qDebug()  << "The sexction" << myGroupToDelete << "exists";

    settings.beginGroup(myGroupToDelete);
     settings.remove("");
     settings.endGroup();

       qDebug() <<"Keys after deleting" << settings.allKeys();
Funktioniert bei mir Qt4.6 auf Linux wunderbar!

Keys before deleting ("ape", "deleteme/aaa", "deleteme/asd", "deleteme/asdqe")
The sexction "deleteme" exists
Keys after deleting ("ape")

Verfasst: 14. Januar 2010 12:50
von hs60
So, hab das jetzt genau so bei mir probiert. Ergebnis:

Code: Alles auswählen

Keys before deleting ("Projekte/0", "Projekte/1", "Projekte/2", "drei/Attribute", "drei/Automatisch", "drei/Benutzername", "drei/Dateimaske", "drei/FTPServer", "drei/Kennwort", "drei/LokalVerz", "drei/Passiv", "drei/Port", "drei/ServerVerz", "drei/Unterverzeichnisse", "eins/Attribute", "eins/Automatisch", "eins/Benutzername", "eins/Dateimaske", "eins/FTPServer", "eins/Kennwort", "eins/LokalVerz", "eins/Passiv", "eins/Port", "eins/ServerVerz", "eins/Unterverzeichnisse", "zwei/Attribute", "zwei/Automatisch", "zwei/Benutzername", "zwei/Dateimaske", "zwei/FTPServer", "zwei/Kennwort", "zwei/LokalVerz", "zwei/Passiv", "zwei/Port", "zwei/ServerVerz", "zwei/Unterverzeichnisse") 
Keys after deleting () 
Wie du siehst, sind ALLE Projekte (eins, zwei und drei) komplett gelöscht.

Ich arbeite hier zwar unter Windows, werde das aber gleich auch unter Linux probieren.

mfg
Herbert

Verfasst: 14. Januar 2010 13:26
von hs60
FEHLER GEFUNDEN !!!

Er lag in der Routine, welche für die Übergabe des Gruppen-Namens verantwortlich ist. Leider wurde hier der Gruppenname gelöscht und ein leerer Wert übergeben. Damit war es klar ...

Vielen herzlichen Dank für die nette Hilfe.

mfg
Herbert

Verfasst: 14. Januar 2010 14:24
von AuE
Super.... dann nur noch den Titel um [gelöst] ergänzen!

Verfasst: 14. Januar 2010 14:29
von 24dan
und bitte die funktionierende routine nochmal posten
:P

Verfasst: 14. Januar 2010 15:31
von hs60
Das Problem sah wie folgt aus:

Code: Alles auswählen

QTextCursor c = ui->teProjekte->textCursor();
ProjektName = c.selectedText();
c.removeSelectedText();
Der ProjektName (globale Variable) wurde in der zweiten Zeile richtig zugewiesen. Nach dem c.removeSelectedText() war plötzlich die Variable "ProjektName" leer. Keine Ahnung, warum. Habe anstatt ProjektName einfach einen neuen lokalen QString mit dem Namen "GroupToDelete" vergeben. So funktioniert es.

An der Routine selbst hat sich nichts verändert:

Code: Alles auswählen

  settings.beginGroup(GroupToDelete);
  settings.remove("");
  settings.endGroup();
Nochmals vielen Dank!