Speichern eines QTabelWidgets

Alles rund um die Programmierung mit Qt
Antworten
multimedial.de
Beiträge: 7
Registriert: 18. März 2010 17:15
Wohnort: Gummersbach
Kontaktdaten:

Speichern eines QTabelWidgets

Beitrag von multimedial.de »

Hallo,

ich habe ein QTableWidget in meiner Anwendung mit Daten, die vom User ausgefüllt werden (es ist eine Art Tagebuch mit einer Funktion zur Verfolgung eigener Ziele).

Nun suche ich nach einem guten Weg, die Inhalte der Tabelle in eine SQlite Datenbank zu speichern. Dabei kann die Tabelle eine beliebige Anzahl von Zeilen aufweisen, je nachdem wieviele Daten der Benutzer eingetragen hat.

Ich könnte dabei natürlich nach den Spalten vorgehen (pro Zeile gibt es im Moment nur 3), jedoch kann dieses Design sich später ändern (also 4 Spalten pro Zeile, etc.etc).

Auch würde ich gerne als Bonus-Feature später eine chronologische Auflistung haben wollen (nach dem Motto "Folgende Zeile(n) sind am 15. Januar 2010 hinzugefügt worden, diese am 21.2.2010 usw.usw").


Der Hintergrund ist der, dass jede Zeile eine Art Aufgabe darstellen kann, deren Erfüllung beliebig viel Zeit in Anspruch nehmen kann. Die Zeitdauer soll jedoch messbar und für den Benutzer nachvollziehbar sein ("Erlangung von Ziel A, eingegeben am 22.1.2010 hat etwa 60 Tage gedauert, und ist wie folgt verlaufen....")

Kann mir da jemand helfen? Ich wäre auch an mehreren Wegen der Speicherung interessiert, also etwa wie man am besten den Inhalt eines QTableWidgets in eine Datenbank ablegen kann, und dabei ein eventuell änderndes Layout beibehalten kann, ohne dass die Spalten verrutschen, und/oder wie man die Tabelle als Objekt serialisieren und als binäres Objekt speichern kann...

Das Ansprechen der Datenbank sowie der entsprechende INSERT-Befehl ist kein Problem, im Moment suche ich eher nach einer Schema-Beschreibung der Tabelle, die ich zusammen mit den Daten ablegen könnte.

Andererseits wäre auch schon ein Speicherformat nach kompletten Zeilen sehr hilfreich, nur wie packt man eine Zeile einer Tabelle in ein Feld in SQlite?

Für jeden Hinweis dankbar,

multimedial.de
Marco812
Beiträge: 139
Registriert: 22. November 2005 11:28

Beitrag von Marco812 »

Hi,

meinst Du evtl. etwas in der Richtung?

Code: Alles auswählen

 for (int row = 0; row < tableWidget->rowCount(); ++row) {
            QString cellValue = tableWidget->item(row, 0)->text();
           //....
}
multimedial.de
Beiträge: 7
Registriert: 18. März 2010 17:15
Wohnort: Gummersbach
Kontaktdaten:

Beitrag von multimedial.de »

danke für deine schnelle Antwort.

Ich weiss wohl schon, wie ich an die Inhalte der Tabelle komme, es ist auch weniger eine Frage in punkto Programmierung selber, sondern mehr der Datenstruktur und Datenorganisation.

Kann man etwa eine qTableWidget komplett als solches serialisieren oder abspeichern? Gibt es etwa eine Schema-Beschreibung analog zu HTML-Tags, die eine gnaze Tabelle beschreiben?

Ich suche halt nach einer möglichst eleganten und flexiblen Methode, den Inhalt einer ganzen Tabelle entweder zu speichern oder besser noch in eine SQLite Datenbank abzulegen.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Nein, dafür gibt es nichts fertiges.
multimedial.de
Beiträge: 7
Registriert: 18. März 2010 17:15
Wohnort: Gummersbach
Kontaktdaten:

Beitrag von multimedial.de »

Hallo upsala,

gut, vielen Dank für diese Antwort.

Gibt es die Möglichkeit in Qt Objekte zu serialisieren? Wenn ja, gibt es eine Beschreibung irgendwo dafür?

Wie könnte eine zeilenweise Repräsentierung der Inhalte in einem Objekt etwa aussehen?

Gibt es die Möglichkeit in Qt, ein Array oder Objekt etwa in eine fest definierte String-Repräsentation umzuwandeln und zurück? Analog zur eval() Funktion in ActionScript etwa oder wie in PHP?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Man könnte event.(!) mithilfe von QtScript etwas tricksen.

Aber: C++ ist im Gegensatz zu PHP & Co keine Scriptsprache und somit ist so etwas nur mit großem Aufwand möglich.
jerry42
Beiträge: 126
Registriert: 9. Oktober 2008 10:48

Beitrag von jerry42 »

Morgen,

gibt es einen bestimmten Grund warum Du gerade QTableWidget benutzen willst?
Nimm doch die QTableView in Verbindung mit einem QSqlTableModel (o.ä.). Damit kannst Du dir quasi dein Datenbankschema anlegen und einfach nur deinem Model sagen, welche Tabelle es heranziehen soll. Somit bist Du relativ flexibel was spätere Änderungen in der Struktur der Tabelle angeht.
Vielleicht ist es genau das was Du suchst.

Schau Dir einfach mal foglendes an:
http://doc.trolltech.com/4.6/qtableview.html
http://doc.trolltech.com/4.6/qsqltablemodel.html
http://doc.trolltech.com/4.6/model-view ... mming.html
multimedial.de
Beiträge: 7
Registriert: 18. März 2010 17:15
Wohnort: Gummersbach
Kontaktdaten:

Beitrag von multimedial.de »

Hallo Jerry42,

vielen Dank für Deine Antwort.

Ja, das geht schon in die richtige Richtung...

Ich muss mir das dennoch nochmal genauer ansehen, weisst Du denn, ob man auch dynamisch Reihen in die Tabelle einfügen kann, und ob diese dann in die DB zurückgeschrieben werden beim QSQLTableModel?
jerry42
Beiträge: 126
Registriert: 9. Oktober 2008 10:48

Beitrag von jerry42 »

ja du kannst einfach dem Model sagen, dass es eine neue Zeile einfügen soll, oder auch eine bestehene Zeile löschen soll.
Mit der EditStrategy des Models kannst Du dann bestimmen zu welchem Zeitpunkt die Daten zurück in die Datenbank geschrieben werden sollen (OnManualSubmit, OnRowSubmit, OnFieldSubmit).
multimedial.de
Beiträge: 7
Registriert: 18. März 2010 17:15
Wohnort: Gummersbach
Kontaktdaten:

Beitrag von multimedial.de »

Hallo Jerry42,

ich verstehe die Model/View Klassen zwar, aber mir fehlt ein konkretes Beispiel, wie man eine Datenbank an die Tabelle bindet.

Gibt es irgendwo ein Beispiel (unter den Links habe ich keines gefunden)?

Ich wäre daran interessiert, eine SQLite Datenbank an eine Tabellenansicht zu binden und editierbar zu machen...

Dankbar für jeden Hinweis,

multimedial.de
drizzt
Beiträge: 29
Registriert: 9. Oktober 2009 13:37

Beitrag von drizzt »

Es gibt doch Qt Demos zum Thema SQL.
jerry42
Beiträge: 126
Registriert: 9. Oktober 2008 10:48

Beitrag von jerry42 »

hier ist ein Beispiel innerhalb der links von oben :)

http://doc.trolltech.com/4.6/qsqltablem ... ml#details
Antworten