[gelöst] Ganze Gruppe in Settings entfernen

Alles rund um die Programmierung mit Qt
Antworten
hs60
Beiträge: 31
Registriert: 13. Januar 2010 16:54

[gelöst] Ganze Gruppe in Settings entfernen

Beitrag 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
Zuletzt geändert von hs60 am 14. Januar 2010 15:27, insgesamt 1-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Code: Alles auswählen

   settings.remove(ProjektName); 
hs60
Beiträge: 31
Registriert: 13. Januar 2010 16:54

Beitrag 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
hs60
Beiträge: 31
Registriert: 13. Januar 2010 16:54

Beitrag 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
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag 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
hs60
Beiträge: 31
Registriert: 13. Januar 2010 16:54

Beitrag 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
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag 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")
hs60
Beiträge: 31
Registriert: 13. Januar 2010 16:54

Beitrag 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
hs60
Beiträge: 31
Registriert: 13. Januar 2010 16:54

Beitrag 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
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Super.... dann nur noch den Titel um [gelöst] ergänzen!
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag von 24dan »

und bitte die funktionierende routine nochmal posten
:P
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
hs60
Beiträge: 31
Registriert: 13. Januar 2010 16:54

Beitrag 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!
Antworten