[gelöst] geheimnisvolles QVariant
Verfasst: 25. Januar 2011 23:18
Hallo Leute,
http://qtforum.de/forum/viewtopic.php?t ... highlight=
in diesem thread hat mir upsala den entscheidenden Tipp gegeben, wie ich in eine QTableModel/QTableView-Darstellung eine Leerzeile einfügen kann.
Das funktioniert auch ganz prima. Bevor ich zum eigentlichen Problem komme, muss ich kurz den Aufbau des Model/View erklären (alles rückgebaut auf ein minimales Beispiel).
Ich habe ein TableModel, abgeleitet von QSqlQueryModel. Die data()-Methode ist nicht überschrieben. Vor dem TableView gibt es noch ein ProxyModel, abgeleitet wie in obigem link beschrieben von QAbstractTableModel. Die data()-Methode des ProxyModels sieht so aus:
Es ging ja darum, eine Leerzeile einzufügen, hier im Beispiel die 3. Zeile. Wenn ich einfach QVariant() zurückliefere, ist alles wunderbar. Wenn ich original zurückliefere, sieht auch alles richtig aus, es wird einfach die richtige zahl 4554 als Integer dargestellt. Wenn ich neu zurückliefere, enthält das entsprechende Feld eine linksbündige checkbox und die Zahl 1234 rechtsbündig. Liefere ich neu2 zurück, erhalte ich in der TableView ebenfalls die linksbündige checkbox und diesmal rechtsbündig 5678. Die qDebug()-Ausgabe liefert folgendes:
Ich verstehe nicht, was ich falsch mache. Zumindest original und neu2 sollten doch identisch sein und gleich dargestellt werden? Das TableModel ist mit einer SQLite-Datenbank verknüpft, die darzustellenden Daten sind vom Typ INTEGER.
Hat jemand eine Idee, woran dies seltsame Verhalten liegen könnte? Freue mich über Tipps,
Grüße,
gk_17
http://qtforum.de/forum/viewtopic.php?t ... highlight=
in diesem thread hat mir upsala den entscheidenden Tipp gegeben, wie ich in eine QTableModel/QTableView-Darstellung eine Leerzeile einfügen kann.
Das funktioniert auch ganz prima. Bevor ich zum eigentlichen Problem komme, muss ich kurz den Aufbau des Model/View erklären (alles rückgebaut auf ein minimales Beispiel).
Ich habe ein TableModel, abgeleitet von QSqlQueryModel. Die data()-Methode ist nicht überschrieben. Vor dem TableView gibt es noch ein ProxyModel, abgeleitet wie in obigem link beschrieben von QAbstractTableModel. Die data()-Methode des ProxyModels sieht so aus:
Code: Alles auswählen
QVariant WeightsGroupingProxyModel::data(const QModelIndex &index, int role) const
{
if(sourceModel && index.isValid())
{
if(index.row() == 3)
{
QVariant original = sourceModel->data(sourceModel->index(index.row(), index.column()), role);
QVariant neu = 1234;
QVariant neu2 = (qlonglong)5678;
qDebug() << original << neu << neu2;
//return original; //alles in Ordnung
//return neu; //falsche Darstellung mit Checkbox
return neu2; //falsche Darstellung mit Checkbox
}
else if(index.row() >= 3)
return sourceModel->data(sourceModel->index(index.row() - 1, index.column()), role);
else
return sourceModel->data(sourceModel->index(index.row(), index.column()), role);
}
return QVariant();
}.QVariant(qlonglong, 4554) QVariant(int, 1234) QVariant(qlonglong, 5678)
Ich verstehe nicht, was ich falsch mache. Zumindest original und neu2 sollten doch identisch sein und gleich dargestellt werden? Das TableModel ist mit einer SQLite-Datenbank verknüpft, die darzustellenden Daten sind vom Typ INTEGER.
Hat jemand eine Idee, woran dies seltsame Verhalten liegen könnte? Freue mich über Tipps,
Grüße,
gk_17