[gelöst] MainWindow und Dialog Einstellungen: Wie Werte ...
[gelöst] MainWindow und Dialog Einstellungen: Wie Werte ...
Ursprünglicher Titel: MainWindow und Dialog Einstellungen: Wie Werte übergeben?
Hallo,
ich habe ein Hauptfenster MainWindow und einen Dialog "Einstellungen", welchen ich aus dem Hauptfenster aufrufen kann.
Das Hauptfenster hat einige Membervariablen, die Einstellungen beinhalten, welche in dem Einstellungen-Dialog verändert werden sollen.
Wie muss ich nun die Datenübergabe vornehmen?
Szenario a: Beim Klick auf den Button, der den Dialog öffnet, werden die Daten vom MainWindow in den Dialog geschrieben und nach Schließen des Dialogs werden die Daten vom MainWindow aus dem Dialog gelesen und in den MainWindow-Membern gespeichert.
Nachteil: Elemente des Dialogs, die beschrieben/gelesen werden müssten, müssen in der Klasse Dialog public sein. Das empfinde ich als unsauber.
Szemario b: Wie Szenario a, aber der Dialog hat public set- und get-Funktionen für die Elemente, die geändert werden müssen: Eigentlich viel Aufwand, aber die sauberste Lösung, die meine Gehirnwindungen momentan hergeben.
Szenario c: Ein globales Objekt settings, das vor main() erzeugt wird und sämtliche Einstellungen beinhaltet, entweder public oder private mit get und set.
Das Objekt wird dann per extern settings; jeder Klasse bekannt gemacht wird. Dies empfinde ich als unsauberer als Szenario a, aber dennoch leichter als b.
Ich bin doch nicht der einzige, der einen Einstellungen-Dialog braucht. Gibt es hier eine einfache Möglichkeit, die Daten zu übergeben? Wie ist eine einfache Möglichekeit, die Daten zu speichern?
Danke für Eure Mühen,
QMaddin
Hallo,
ich habe ein Hauptfenster MainWindow und einen Dialog "Einstellungen", welchen ich aus dem Hauptfenster aufrufen kann.
Das Hauptfenster hat einige Membervariablen, die Einstellungen beinhalten, welche in dem Einstellungen-Dialog verändert werden sollen.
Wie muss ich nun die Datenübergabe vornehmen?
Szenario a: Beim Klick auf den Button, der den Dialog öffnet, werden die Daten vom MainWindow in den Dialog geschrieben und nach Schließen des Dialogs werden die Daten vom MainWindow aus dem Dialog gelesen und in den MainWindow-Membern gespeichert.
Nachteil: Elemente des Dialogs, die beschrieben/gelesen werden müssten, müssen in der Klasse Dialog public sein. Das empfinde ich als unsauber.
Szemario b: Wie Szenario a, aber der Dialog hat public set- und get-Funktionen für die Elemente, die geändert werden müssen: Eigentlich viel Aufwand, aber die sauberste Lösung, die meine Gehirnwindungen momentan hergeben.
Szenario c: Ein globales Objekt settings, das vor main() erzeugt wird und sämtliche Einstellungen beinhaltet, entweder public oder private mit get und set.
Das Objekt wird dann per extern settings; jeder Klasse bekannt gemacht wird. Dies empfinde ich als unsauberer als Szenario a, aber dennoch leichter als b.
Ich bin doch nicht der einzige, der einen Einstellungen-Dialog braucht. Gibt es hier eine einfache Möglichkeit, die Daten zu übergeben? Wie ist eine einfache Möglichekeit, die Daten zu speichern?
Danke für Eure Mühen,
QMaddin
Zuletzt geändert von qmaddin am 20. September 2009 08:41, insgesamt 1-mal geändert.
-
John Darius
- Beiträge: 8
- Registriert: 20. April 2009 18:18
Die Daten, die gespeichert werden sollen, sind mengenmäßig 3 int, 2 QString und 1 bool.
Die Daten werden beim Start von MainWindow mittels QSettings eingelesen. Idee war, diese Daten in MainWindow als Membervariable zu speichern. So hat MainWindow Zugriff.
Die Daten werden beim Beenden von MainWindow mittels QSettings geschrieben.
Während der Laufzeit sollen die Daten MainWindow und dem Einstellungen-Dialog zur Verfügung stehen, sowohl zum auslesen, als auch zum beschreiben.
Lohnt es sich hier, die Klasse QSettings abzuleiten als meinetwegen Settings. Ein Objekt dieser Klasse gehört dann MainWindow.
In Settings werden dann die Daten gespeichert, im Konstruktor/Destruktor werden sie mittels QSettings eingelesen/weggespeichert.
Und dann übergebe ich dem Dialog einen *Settings-Pointer auf eben diesen Member? Hier umgehe ich aber wieder private...
Ich wollte nicht im Dialog ein QSettings-Objekt aufmachen, da ich ja die Daten aus MainWindow übernehmen wollte.
Eben nach dem Schema: Daten werden beim Start einmal ausgelesen, beim Ende einmal in die Datei geschrieben. Zwischendrin existieren die gültigen Daten nur im MainWindow.
Die Daten werden beim Start von MainWindow mittels QSettings eingelesen. Idee war, diese Daten in MainWindow als Membervariable zu speichern. So hat MainWindow Zugriff.
Die Daten werden beim Beenden von MainWindow mittels QSettings geschrieben.
Während der Laufzeit sollen die Daten MainWindow und dem Einstellungen-Dialog zur Verfügung stehen, sowohl zum auslesen, als auch zum beschreiben.
Lohnt es sich hier, die Klasse QSettings abzuleiten als meinetwegen Settings. Ein Objekt dieser Klasse gehört dann MainWindow.
In Settings werden dann die Daten gespeichert, im Konstruktor/Destruktor werden sie mittels QSettings eingelesen/weggespeichert.
Und dann übergebe ich dem Dialog einen *Settings-Pointer auf eben diesen Member? Hier umgehe ich aber wieder private...
Ich wollte nicht im Dialog ein QSettings-Objekt aufmachen, da ich ja die Daten aus MainWindow übernehmen wollte.
Eben nach dem Schema: Daten werden beim Start einmal ausgelesen, beim Ende einmal in die Datei geschrieben. Zwischendrin existieren die gültigen Daten nur im MainWindow.
Wenn Du einen Pointer dereferenzierst hast Du sowieso keinen Pointer mehr.qmaddin hat geschrieben: Und dann übergebe ich dem Dialog einen *Settings-Pointer auf eben diesen Member?
Wie gesagt, entweder eine Singleton Klasse verwenden, oder jedesmal ein QSettings Objekt laden und speichern. Ich weiß nicht genau was Du vor hast. was ist wenn der Benutzer die Daten direkt in der Configdatei ändert, werden diese dann während des Betriebes überschrieben? Falls JA, dann würde ich das mit QSettings machen.
Bzw. kannst Du einen Mix aus beiden machen, indem Du in der Singelton Klasse jedesmal speicherst bzw. lädst wenn Du eine getter oder setter Methode aufrufst. Somit geht das dann auch ganz transparent.
LG NoRulez