[gelöst] geheimnisvolles QVariant

Alles rund um die Programmierung mit Qt
Antworten
gk_17
Beiträge: 37
Registriert: 4. Oktober 2009 19:20

[gelöst] geheimnisvolles QVariant

Beitrag von gk_17 »

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:

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();
}
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:
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
Zuletzt geändert von gk_17 am 26. Januar 2011 18:20, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Die role sollte man nicht einfach ignorieren...
http://doc.qt.nokia.com/latest/qt.html# ... aRole-enum
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
gk_17
Beiträge: 37
Registriert: 4. Oktober 2009 19:20

Beitrag von gk_17 »

danke!
jetzt gehts wie es soll ;)
Antworten