S
Zunächst erst einmal finde ich (das ist allerdings Geschmackssache), dass du dich auf eine Sprache festlegen solltest, mit der du Variablen benennst und kommentierst. Dein derzeitiges Gemisch finde ich grauenhaft.
Wenn dein Englisch nicht gut genug ist (wobei für Variablennamen üblicherweise die Übersetzungen von Google Translate reichen), dann solltest du alles auf Deutsch formulieren. Wobei Englisch im Zweifelsfall immer vorzuziehen ist.
Unter der Annahme, dass der Rückgabewert von den ganzen isChecked() ein bool ist (ist vermutlich so, weil das warhscheinlich alles QCheckBoxes oder so sind), dann mach einfach folgendes:
ds = doors[i]->isChecked();
sls = slides[i]->isChecked();
dp = dpress[i]->isChecked();
sp = spress[i]->isChecked();
hw = hrd[i]->isChecked();
Kürzer und besser lesbar. Wenn ich nichts übersehen habe, dann müsste das eigentlich problemlos möglich sein und du nichts herausgeschnitten hast. (Erklärung: true == 1 und false == 0)
Dein ctuer::safe() würde ich so schreiben:
void ctuer::safe(const string& acnam)
{
ofstream file("./ACDATA/"+acnam+".ac", ios::app);
file << nummer << '\n'
<< name << '\n'
<< door_stat << '\n'
<< slide_stat << '\n'
<< door_press << '\n'
<< slide_press << '\n'
<< hardw << '\n';
}
Den Klassennamen ctuer finde ich auch ziemlich unschön. Einmal schreibt man bei eigene Klassen üblicherweise zur Kennzeichnung den ersten Buchstaben groß und das "c", das vermutlich für Class steht, braucht man eigentlich auch nicht.
Die Datei kann man schon im ctor festlegen, std::ios::out braucht man beim std::ofstream nicht.
Insgesamt finde ich deinen Code irgendwie sehr verwirrend. Der Sinn und Zweck von vielen Aktionen ist irgendwie nicht ganz klar. Zum Beispiel das hier:
tueren[i].set_nummer(nr);
tueren[i].set_name(nm);
tueren[i].set_door_stat(ds);
tueren[i].set_slide_stat(sls);
tueren[i].set_door_press(dp);
tueren[i].set_slide_press(sp);
tueren[i].set_hardw(hw);
Warum schreibst du die Ergebnisse nicht direkt dorthin?
Insgeamt machst du so etwas öfter, zum Beispiel auch mit "nm" in Zeile 58. Abgesehen davon, dass das kein toller Variablenname ist.
In meiner ursprünglichen Programmversion habe ich die Variable in ein Label der GUI geschrieben (von std::string in QString) und beim Speichern der Datei wieder auslesen lassen (QString in std::String). Das hat problemlos funktioniert. Allerdings möchte ich meine GUI nicht als Datenablage missbrauchen.
Was du hiermit sagen willst, kann ich nicht so ganz verstehen. Oder auch: will ich nicht verstehen, wenn es tatsächlich so gemeint ist, wie ich es verstehe.
Und du kannst eigentlich fast immer std::string verwenden, wenn ein QString für eine Funktion verlangt ist, dann hat QString meines Wissens eigentlich einen eigenen ctor dafür. Wenn nicht, einfach std::string::c_str() verwenden, dafür gibt es einen ctor.
Edit:
Zu deiner Lösung: Du kennst aber schon "this", oder?