2009-08-03 14 views
3

Grüße,QT Model/View-Programmierung mit komplizierten Datenstrukturen

Ich bin kein professioneller Anwendungsentwickler so ist wahrscheinlich nicht so vertraut mit dem Model/View-Entwurfsmuster, wie ich sein soll. Nichtsdestotrotz versuche ich es in einer Hobby-App zu verwenden und kläglich zu versagen. Das Hauptproblem, das ich habe, ist, dass die Daten, die ich anzeigen und ändern möchte, nicht einfach mit einer Erweiterung von QAbstractItemModel dargestellt werden können.

Die Daten, die ich zu verkapseln versuche, sind im Wesentlichen eine veränderbare/schrumpfbare, veränderbare Liste von ganzen Zahlen. Soll ich das Model/View-Muster für solche Daten aufgeben? Es erscheint angemessener, wenn die "Dimensionen" der Daten festgelegt sind. Wenn nicht, gibt es ein Beispiel für eine Implementierung, die ich in Erwägung ziehen könnte, oder ein gutes Buch, das ich aufheben sollte?

Grüße.

Antwort

3

Ich würde QAbstractListModel betrachten. Es klingt wie ein relevanteres Modell als das grundlegende QAbstractItemModel.

Es gibt auch eine etwas andere Ansicht dieses Modells im Beispiel: Puzzle

Wenn Sie eine höhere Ebene Blick auf Model/View benötigen Besuche this.

+0

Das Rätselbeispiel ist interessant, aber ein wenig merkwürdig. Verstehst du zufällig, warum der Autor das Model-View-Muster für das Puzzle-Widget nicht verwendet hat? –

+0

So endete ich nicht mit dem Modelview/Muster. Ich werde tun, wie der Autor von Puzzle tat und nur eine Ansichtsklasse implementieren, wenn ich die vorhandenen QT-Modellklassen nutzen möchte. Mein ursprünglicher Plan war es, ein benutzerdefiniertes Modell zu erstellen. Kein benutzerdefiniertes Modell bedeutet, zumindest jetzt, keine benutzerdefinierte Ansicht. –

+0

Richtig, nur tun, was benötigt wird. Versuchen Sie nicht, Ihr Modell mit einer Qt-Ansicht zu arbeiten, wenn dies nicht der Fall ist. Ich glaube, dass das Puzzle-Beispiel Model/View nicht verwendet, da die QAbstractItemView-Klasse wirklich nicht zum Design passt. –

0

QAbstractItemModel ist nur ein, zugegebenermaßen sehr begrenzter Weg zur Implementierung des Model/View-Entwurfsmusters. Wenn Sie sehen, dass Ihre Situation nicht genau passt, machen Sie sich nicht die Mühe, sie zu erzwingen.

Ein besserer Ansatz für Sie wäre wahrscheinlich, nur Ihre eigene Model-Klasse mit Ihren eigenen View-Klassen zu ziehen und QAbstractItemModel aufzugeben. Es gibt mehr zu diesem Design-Muster als die seltsame Geschmack in QT implementiert und das Aroma funktioniert nur gut für ganz bestimmte Anwendungen.

Ich schlage vor, Sie lesen about it some more und entwerfen Sie Ihre eigene Model-View-Setup. Ihr Klassendesign ist sehr wahrscheinlich sauberer und besser zu verstehen, wenn Sie Ihre eigenen ziehen.

+0

Ich denke, Sie müssen QAbstractItemModel implementieren, wenn Sie Ihr Modell in Standardansichten (Baum, Tabelle, etc) verwenden möchten – Eugene

+0

Ich habe darüber nachgedacht, aber die wirkliche Fähigkeit, die ich mit diesem Projekt ausübte, funktioniert in einem Rahmen (was ich selten in meinem "richtigen" Job mache). –

+0

Ableiten von und Implementieren von QAbstractItemModel (oder einer seiner abgeleiteten Klassen) ist, wie Sie in (Qt) Framework arbeiten :). – Eugene

Verwandte Themen