Attribute und Einstellungen klassenübergreifend
Verfasst: 14. Juli 2006 10:25
Hallo.
Im #qt channel diskutieren wir seit einiger Zeit darüber:
Mein Fall: Ich habe ein Hauptfenster und ein Unterfenster child QDialog settings. Das Hauptfenster hat attribute wie host, port und eine Methode saveSettings(). Auch der QDialog settings möchte auf saveSettings() zugreifen, wie auch auf attribute host, port.
Auch wenn QDialog ein child vom Hauptfenster ist, kennt es nicht MainWindow::saveSettings().
Soll ich nun diese Elemente alle public machen?
Im #qt channel diskutieren wir seit einiger Zeit darüber:
Mein Fall: Ich habe ein Hauptfenster und ein Unterfenster child QDialog settings. Das Hauptfenster hat attribute wie host, port und eine Methode saveSettings(). Auch der QDialog settings möchte auf saveSettings() zugreifen, wie auch auf attribute host, port.
Auch wenn QDialog ein child vom Hauptfenster ist, kennt es nicht MainWindow::saveSettings().
Soll ich nun diese Elemente alle public machen?
- Methoden für den Variablenzugriff wie getHost(), getPort() scheint mir zu aufwändig.
- Attribute sollten ja nicht public sein.
- friend class wäre eine Möglichkeit, wenn auch nicht ganz sauber.
- Wie verknüpfe ich ein SIGNAL aus dem QDialog settings mit einer Methode des Hauptfensters?
Das Objekt des qMobida (Hauptfenster) kann aber gar nicht bekannt sein, da es in main() erstellt wird. main() kann ich doch nicht includen.
Code: Alles auswählen
#include "settings.h" #include "qmobida.h" Settings::Settings(QWidget* parent, const char* name, bool modal, WFlags fl) : SettingsBase(parent,name, modal,fl) { connect( saveButton, SIGNAL(clicked()), &qMobida, SLOT(QMobida.fileSave_settings()) ); - In saveSettings() wird ja QSettings verwendet. Nun gibt es Leute die QSettings gerne "missbrauchen", um klassenübergreifend Daten zu verwenden. Eigentlich ist das ok, wahrscheinlich wird der Zugriff sogar gecached und läuft nicht direkt über Dateizugriff.
- Nachteil: Ich möchte Werte wie host, port auch mal temporär setzen. QSettings::writeEntry() läuft aber direkt in die Datei. Abhilfe wäre z.B. 2 QSettings Gruppen oder Dateien zu verwalten für temporär und permanent.
- In jedem Fall muß QSettings settings im ganzen Programm mitgeführt und die Gruppe offengehalten werden. Bisher war das nur innerhalb der Methode writeSettings() nötig.