Seite 1 von 1

QTableView clonen / duplizieren / Voreinstellung übernehmen

Verfasst: 20. März 2010 20:37
von ska
Hallo,

mit dem QtDesigner von Qt4.6 habe ich eine UI erstellt, die ein QTableView Objekt namens "table" enthält. Dort möchte ich nacheinander verschiedene Models bzw. Datenbanken mit jeweils spezifischen Einstellungen anzeigen.

Im Menü des Fensters kann man auswählen welchen Daten angezeigt werden sollen, dann wird das entsprechende QXYZModel erzeugt und je nach Notwendigkeit, Spalten ausgeblendet, Editierbarkeit aktiviert, SQL-Fremdschlüssel eingebunden ... .

Um nun nicht bei jeder Änderung des Models (bzw. der DB) alle vorher gemachten Einstellungen wieder rückgángig machen zu müssen, habe ich mir gedacht, gleich einen neuen QTableView zu erzeugen und gegen "table" auszutauschen.

Wie bekomme ich jetzt aber die Standardeinstellungen, die ich mit dem QtDesigner gemacht habe in das neue QTableView-Object?
Ich möchte QtDesigner weiter nutzen, da es a) bequem ist und b) ggf. auch andere Nicht-Programmierer das Fenster anpassen sollen.

===

Ich habe in einem Thread von 2006 gelesen, das Qt keinen Copy-Constructor hat, ich finde auch keine clone()-ähnliche Funktion. Damit hätte ich "table" zu Beginn des Programms dupliziert, später diese Kopie immer wieder geklont und so die Standardwerte übernommen.

===

Ich finde auch keine Möglichkeit, ein Sub-Objekt anzulegen, welches die Einstellungen von "table" erbt. In etwa so: Ich erzeuge "QTableView *subtable" so, dass es alle Einstellungen von "table" übernimmt, außer sie werden direkt in "subtable" verändert. Dann könnte ich "table" am Beginn meines Programmes sichern und im Fenster durch ein neues "subtable" ersetzen. Mit jeder Änderung der Datenbank würde ich "subtable" loschen und ein neues Object erzeugen.

===

Gibt es eine Möglichkeit?

Danke, Steffen

Verfasst: 21. März 2010 11:10
von Willi2793
Ich bin mir nicht sicher ob ich es richtig verstanden habe. Aber schau mal ob die Funktion "setModel" vom QTableView Dir nicht weiter hilft.

Verfasst: 22. März 2010 09:53
von ska
Damit arbeite ich z.Z., d.h. wird im Menü "DB #1" ausgewählt, wird ein neues Model angelegt, um auf die Daten zuzugreifen; nun muss jedoch noch der View angepaßt werden, um die Darstellung der Daten korrekt abzubilden, d.h. einige Spalten ausblenden (hide), beim einem QSqlRelationalTableModel werden "relation"s definiert, Standardsortierung gesetzt, einige Spaltenbreiten verändert, Farben verändert, ... . Nicht die Daten selbst, sondern deren Darstellung bereitet mir Schwierigkeiten.

Wird nun im Menü "DB #2" ausgewählt, muß ich viele der Änderungen wieder gezielt rückgängig machen. Ich verwende nicht nur SQL-Tabellen als Model, sondern auch einige @StringListModel.

Am einfachsten wäre es IMHO, wenn ich zu einem View zurückkehren könnte, der dieselben Einstellungen hat, wie im QtDesigner festgelegt. Dann brauchte ich mir keine Gedanken über die DB-spezifischen Änderungen zu machen oder besser gesagt, wie ich den View wieder in den Original-Zustand zurückversetzen kann.