Seite 1 von 1
Modell erstellen (MVC)
Verfasst: 24. Januar 2008 17:14
von Allroad
Hi,
bin grad dabei das Model/View Konzept zu verstehen und da hätte ich eine Frage:
in dem Beispiel aus der Dokumentation wird ein einfaches Read-only Modell erstellt.
http://doc.trolltech.com/4.3/model-view ... odels.html
In der Klassendeklaration wird der Konstruktor(?) so definiert:
Code: Alles auswählen
...
public:
StringListModel(const QStringList &strings, QObject *parent = 0)
: QAbstractListModel(parent), stringList(strings) {}
...
kann mir jemand vorallem die zweite Zeile bitte erklären?
Danke!
Re: Modell erstellen (MVC)
Verfasst: 24. Januar 2008 17:29
von franzf
Allroad hat geschrieben: Code: Alles auswählen
...
public:
StringListModel(const QStringList &strings, QObject *parent = 0)
: QAbstractListModel(parent), stringList(strings) {}
...
kann mir jemand vorallem die zweite Zeile bitte erklären?
Das hat weder was mit Qt noch mit MVC zu tun, das ist einfach eine Basisinitialisierung. Du willst ja dass deine Klasse (StringListModel) beim initialisieren auch die Sachen aus dem Konstruktor der Basisklasse macht - dafür ist das erste, direkt hinter dem ":". Das zweite schimpft sich Elementinitialisierung und füttert den Member (stringList) deiner Klasse mit dem Wert, der dem Konstruktor übergeben wurde (strings).
Ich denke es lohnt sich für dich da mal ein bisschen C++-Literatur zu wälzen - stöber einfach mal durch die
Links hier.
Grüße
Franz
Verfasst: 24. Januar 2008 17:34
von RHBaum
QAbstractListModel ist ne abstrakte (weil unvollstaendige) Klasse fuer eindimensionale Models. Sie implementiert dir paar funktionen, die bei eindimensionalen Modells quasi standard sind, also eigentlich nur tipparbeit waeren.
QAbstractItemModel waer die Allgemeinere Basis, die auch geeignet waer fuer 2 dimensionale models, und oder eltern (parent) basierte models (Treeview heissen die unter windows) ...
QAbstractListModel teil der QObjectHirarchie ist, und fuer einige member die es erzeugt ein QOBject parent braucht, sollte man den Konstruktor von QAbstractListModel auch mit dem parent aufrufen ... das machst du mit
"QAbstractListModel(parent)". Damit gibst du eigentlich das parent von deinem construktor nur an das Object weiter von dem du ableitest.
das gebilde direkt nach der konstruktor def zeile vorm codeblock fuer den konstruktor (also die 2. zeile da) nennt man initialisierungsliste ... constante member und referenzen sowie basisklassen kann man nur da initielisieren !
stringList(strings) initialisiert deine referenz auf ne Stringliste, also die membervariable, mit einer Stringliste, ueber den parameter im konstruktor von aussen ....
sprich du legst ne stringliste an ... uebergibst die deiner Modelimpl im Konstruktor, und die arbeitet von nun ab auf der uebergebenen liste, sie hat also keine eigene.
Sprich du musst kannst die stringliste aussen lustig bearbeiten, wenn fertig bist, sagst dem modell das es mal neu gezeichnet werden sollte, und voiala, es aktualisiert die daten auf basis der stringliste ....
Das sind aber uebliche c++ techniken, hat mit qt weniger zu tun.
Bevor du dich mit der QT rumaergerst, sollte aber C++ basiswissen vorhanden sein, sonst hast ned viel freude ....
Ciao ...
Verfasst: 24. Januar 2008 17:43
von Allroad
Danke euch für die schnellen und ausführlichen Antworten! Ich habs leider befürchtet dass es weniger mit Qt/MVC zu tun hat, vielmehr mit C++, und da bin ich auch nicht so weit fortgeschritten mit meinen Kenntnissen...! naja ich schau mir nochmal die Doc über Klassen in C++ an!
Gruss,
Mihai