Seite 1 von 1
QSettings - Verständnisfrage
Verfasst: 3. Februar 2009 14:48
von CLRS530
Zuallererst: Ich habe mir die Dokumentation zu QSettings genau durchgelesen.
Da ich meine Settings aber in mehreren Klassen und Threads benutzen muss/möchte, ist mir nicht ganz klar, wie ich das am besten anstellen kann.
Wenn ich in jeder Klasse ein neues QSettings Objekt erstelle, greift es im Speicher auf die selben Daten zu oder liest es die Datei immer aufs neue auf und erstellt neue Bereiche im Speicher und reagiert auf eine geänderte Datei von anderen Klassen, um die Settings neu zu laden?
In einem früheren Projekt ohne QT hatte ich es mit static variablen gelöst. Aber in diesem Fall habe ich so viele Einstellungen, dass es lästig wäre dort dauernd etwas zu ändern.
Verfasst: 3. Februar 2009 15:01
von archer
Erstelle doch einfach eien Instanz und reiche den Zeiger weiter, z.B im Konstruktor der nächsten Klasse.
Verfasst: 3. Februar 2009 15:06
von CLRS530
Ja genau, das wäre die 3. Möglichkeit. Das wäre aber genauso sehr lästig, da es manchmal viele Klassen hintereinander sein können, bei denen es nur weitergereicht wird.
Das würde ich nur in betracht ziehen, wenn es wirklich sein muss. Ich glaube aber daran, dass ich jedesmal ein neues Objekt erstellen kann, ohne viel Overhead zu haben.
Ich weiß zwar nicht, wie es intern abläuft, aber sonst hätte ich ja auch die Frage nicht gestellt.
Verfasst: 3. Februar 2009 15:07
von franzf
archer hat geschrieben:Erstelle doch einfach eien Instanz und reiche den Zeiger weiter, z.B im Konstruktor der nächsten Klasse.
Wird so nicht klappen, wenn die Settings dann von nem anderen Thread aus (wie er es wohl vor hat) verändert werden sollen. QSettings ist nur reeantrant und nicht threadsafe!
Oder wird in den Threads nur aus dem Settings-Objekt gelesen? Dann bietet sich ein (const) pointer an, auf den die Threads zugreifen können. Aber nicht die Settings verändern, während der Thread rechnet
Ansonsten halt in jedem Thread ein eigenes QSettings-Objekt erstellen, laut Doku geht das recht schnell.
Für Zugriff aus mehreren Stellen des Codes kannst du ja den Tip mit QCoreAplication::setApplicationName() usw verwenden. Dann reicht ein
QSettings settings;
Und AFAIK reagiert ein QSettings-Objeckt auf Änderungen an der zugrundeliegenden Config, auch wenn es das nicht selbst geändert hat.
Grüße
Franz
Verfasst: 3. Februar 2009 15:13
von androphinx
Ich denke mal von QSettings soll es bloß eine Instanz geben, also könnte man sich doch rein theoretisch ein Singleton bauen, mit dem man die Einstellungen zumindest auslesen kann, oder???
Mfg androphinx
Verfasst: 3. Februar 2009 15:20
von CLRS530
Ja danke, so in etwa habe ich es mir gedacht. Die threads würden auf alle Fälle nur lesen, wenn es überhaupt sein muss, das werde ich im Laufe des Projektes sehen.
Ich frage mich nur, wie das intern abläuft. Erstelle ich das erste Mal ein QSettings Objekt muss die Datei doch auf alle Fälle gelesen werden.
Wird der Speicherort für die Company und den Namen irgendwo gespeichert und da dann drauf zugegriffen? Anders würde ich mir das nicht vorstellen können.
Weiterhin hatte ich auch gelesen das die QSettings Klasse die Änderungen extra festhält und diese nicht auf den Quelldaten vorgenommen werden. Hat zwar hiermit nicht direkt etwas zu tun, aber doch mit dem generellen Verständnis der Klasse.