Aufruf der Funktion "QVariant data(...)"

Alles rund um die Programmierung mit Qt
Allroad
Beiträge: 61
Registriert: 23. Oktober 2007 10:19
Kontaktdaten:

Aufruf der Funktion "QVariant data(...)"

Beitrag von Allroad »

Im Beispiel Puzzel http://doc.trolltech.com/4.3/itemviews-puzzle.html wird immer wieder die Funktion

Code: Alles auswählen

QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
aufgerufen, wenn ich das richtig verstanden hab, um Daten für den View aufzurufen.
Ich hab nun das Programm so modifiziert dass auf der Konsole ausgegeben wird, immer wenn diese Funktion aufgerufen wird, und die Argumente (index und role)

Meine Frage: wer ruft diese Funkion? wer setzt die Parameter (z.B für role) ?

kleiner Ausschnitt aus der Konsole:

Code: Alles auswählen

 
index = QModelIndex(1,0,0x0,PiecesModel(0x8103f80) )  
role = 8 

index = QModelIndex(2,0,0x0,PiecesModel(0x8103f80) )  
role =6 

index = QModelIndex(2,0,0x0,PiecesModel(0x8103f80) )  
role =7
Gruss,
Mihai
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Das View ruft data() vom Model auf.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Allroad
Beiträge: 61
Registriert: 23. Oktober 2007 10:19
Kontaktdaten:

Beitrag von Allroad »

ok, aber was ist mit den Argumenten? wenn ich mir die Ausgabe anschaue, stelle ich fest, dass role =6, beim nächsten Aufruf =7, dann =9, 1, 0, 10, 8, und dann gehts wieder von vorne los... woher kommen denn diese Werte?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Doku zu QAbstractItemModel::data() schonmal ansatzweise gelesen?
http://doc.trolltech.com/4.3/qt.html#ItemDataRole-enum
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Allroad
Beiträge: 61
Registriert: 23. Oktober 2007 10:19
Kontaktdaten:

Beitrag von Allroad »

ja, das hab ich schon gemacht, trotzdem versehe ich nicht wieso nur genau diese Rollen "abgefragt" werden und die anderen nicht...?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ok - Dein Listview möchte was darstellen. Was muss es also machen? Die Daten abfragen. Ne Glaskugel hat das Listview ja noch nicht...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Allroad
Beiträge: 61
Registriert: 23. Oktober 2007 10:19
Kontaktdaten:

Beitrag von Allroad »

:) ich glaub wir kommen langsam näher....!
kann ich aber meinem View beibringen welche Rollen es abfragen soll?
(z.B. ToolTipRolle)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Warum sollte ein View einfach so ne Rolle abfragen die es nicht braucht? Die ToolTip Rolle wird nur abgefragt wenn ein Tooltip dargestellt werden soll. Was ist daran so schwer?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Allroad
Beiträge: 61
Registriert: 23. Oktober 2007 10:19
Kontaktdaten:

Beitrag von Allroad »

OK, das macht Sinn. Aber eine Frage hätte ich trotzdem: ich versuch in meinem ListView QPoint-s darzustellen... und so gebe ich die Daten zurück:

Code: Alles auswählen

if (role == Qt::DisplayRole)
...
return QPoint(positionList.value(index.row()));
//positionList ist eine Liste von QPoints
und da tut sich leider nichts... Muss ich mein QPoint(...) umwandeln? in einen String zum Beispiel?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Es muss irgenwas darstellbares zurückkommen - ein QPoint kann man nicht darstellen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Allroad
Beiträge: 61
Registriert: 23. Oktober 2007 10:19
Kontaktdaten:

Beitrag von Allroad »

Ja, ich habs in ein String umgewandelt, jetzt klappt es. Mit qDebug() kann man ein QPoint schon ausgeben, ich dachte es geht vielleicht auch in diesem Fall.

Danke!
Allroad
Beiträge: 61
Registriert: 23. Oktober 2007 10:19
Kontaktdaten:

Beitrag von Allroad »

mal wieder ne Frage...
Auch in dem Beispiel "Puzzle" wird die Funktion removeRows(...) benutzt um entsprechende Reihen aus dem Model bzw. View zu löschen.
Handelt es sich dabei wieder um so eine Funktion, wie die data()-Funk., die vom View aufgerufen wird?
Ich habe die removeRows() in mein Modell eingebaut, allerdings wird sie nie aufgerufen.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ich habe die removeRows() in mein Modell eingebaut, allerdings wird sie nie aufgerufen.
Wann sollte sie denn deiner Meinung nach, ohne zutun des Users aufgerufen werden?
Allroad
Beiträge: 61
Registriert: 23. Oktober 2007 10:19
Kontaktdaten:

Beitrag von Allroad »

ich dachte das View merkt dass ich aus meinem Modell was gelöscht habe... Das sieht, meiner Meinung nach, in dem Beispiel so aus! Ich konnte nicht rausfinden (im Beispiel) wer die removeRows() aufruft...!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Die View merkt ja auch (über die Signale rowsAboutToBeRemoved z.B.) daß im Model gelöscht wurde, aber das heist nicht, das die View dem Model auch mitteilen muß, daß es etwas zu löschen hat.
Antworten