Seite 1 von 2
Aufruf der Funktion "QVariant data(...)"
Verfasst: 30. Januar 2008 13:24
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
Verfasst: 30. Januar 2008 13:39
von Christian81
Das View ruft data() vom Model auf.
Verfasst: 30. Januar 2008 15:12
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?
Verfasst: 30. Januar 2008 15:16
von Christian81
Doku zu QAbstractItemModel::data() schonmal ansatzweise gelesen?
http://doc.trolltech.com/4.3/qt.html#ItemDataRole-enum
Verfasst: 30. Januar 2008 17:38
von Allroad
ja, das hab ich schon gemacht, trotzdem versehe ich nicht wieso nur genau diese Rollen "abgefragt" werden und die anderen nicht...?
Verfasst: 30. Januar 2008 17:46
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...
Verfasst: 30. Januar 2008 17:51
von Allroad

ich glaub wir kommen langsam näher....!
kann ich aber meinem View beibringen welche Rollen es abfragen soll?
(z.B. ToolTipRolle)
Verfasst: 30. Januar 2008 17:56
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?
Verfasst: 30. Januar 2008 18:16
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?
Verfasst: 30. Januar 2008 19:04
von Christian81
Es muss irgenwas darstellbares zurückkommen - ein QPoint kann man nicht darstellen.
Verfasst: 31. Januar 2008 09:29
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!
Verfasst: 31. Januar 2008 12:12
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.
Verfasst: 31. Januar 2008 12:17
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?
Verfasst: 31. Januar 2008 12:27
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...!
Verfasst: 31. Januar 2008 17:04
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.