[gelöst] Qt 4.3.0 - Bug im QSortFilterProxyModel ?

Alles rund um die Programmierung mit Qt
Antworten
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

[gelöst] Qt 4.3.0 - Bug im QSortFilterProxyModel ?

Beitrag von RD1978 »

Hallo,

ich habe mir grad Qt 4.3.0 installiert und hab folgendes Problem.

Ich habe eine QTreeView und ein eigenes Model, welches von QSqlQueryModel erbt. Wenn ich dieses Model nur der QTreeView übergebe, dann ist alles in Ordnung.
Wenn ich aber ein QSortFilterProxyModel zwischen der QTreeView und meinem Model setze und ich jetzt alle Datensätze lösche und danach neue anlege, dann habe ich in der ersten Zeile in den QTreeView eine Leerzeile. Je öfter ich das mache, je mehr Leerzeilen werden in den ersten Zeilen eingefügt.

Mit Qt 4.2.3 war das noch nicht so...

Hat vieleicht einer ne Ahnung woran das liegen könnte?

MfG RD1978
Zuletzt geändert von RD1978 am 12. Juli 2007 20:43, insgesamt 1-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Beispielcode zum reproduzieren?

Wohnort: Stralsund (DDR)
Wir haben 2007.
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

Beitrag von RD1978 »

Hi,

danke erstmal für deine schnelle Antwort...

Code: Alles auswählen

// So ohne Sortierung funktioniert es
orderModel = new OrderModel( this );
treeViewOrder->setModel( orderModel );
treeViewOrder->setItemDelegateForColumn( 1, new OrderComboBoxDelegate( this ) );

// So funktioniert es seit Qt 4.3.0 nicht mehr
orderModel = new OrderModel( this );
QSortFilterProxyModel *proxyOrderModel = new QSortFilterProxyModel( this );
proxyOrderModel->setSourceModel( orderModel );
treeViewOrder->setModel( proxyOrderModel );
treeViewOrder->sortByColumn( 1, Qt::AscendingOrder );
treeViewOrder->setItemDelegateForColumn( 1, new OrderComboBoxDelegate( this ) );
Wir haben 2007.
Hier in HST lebt die DDR noch... *Spaß* ;-)

MfG RD1978
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Code: Alles auswählen

#include <QtGui>

int main(int argc, char *argv[])
{
	QApplication app(argc, argv);
	
	QStandardItemModel *model=new QStandardItemModel();
	for (int i=0; i<10; i++) {
		model->appendRow(new QStandardItem(QString("test %1").arg(i)));
	}
	
	QTreeView *view=new QTreeView();
	view->show();
	
	QSortFilterProxyModel *proxy= new QSortFilterProxyModel(); 
	proxy->setSourceModel(model);	
	view->setModel(proxy);
	
	view->sortByColumn(0);
	
	model->removeRow(0);	
	model->appendRow(new QStandardItem("test 10"));
		
	return app.exec();
}
Das nennt sich minimal funktionsfähiges Beispiel, das im übrigen deiner Beschreibung entsprechen sollte und trotzdem funktioniert.
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

Beitrag von RD1978 »

Danke für deine Mühe, hab den fehler gefunden.

Mein Model erbt ja von QSqlQueryModel, QSqlQueryModel hat im Gegensatz zur übergeordneten Klasse QAbstractTableModel eine Methode clear() die alle resourcen des Models frei gibt. Ich hab beim refreshen vergessen clear() aufzurufen.

P.S.: Wundert mich aber dennoch, warum das bei Qt 4.2.3 vorher nicht aufgetreten ist.

MfG RD1978
Antworten