QT ListView Sortierung

Alles rund um die Programmierung mit Qt
Antworten
BSW
Beiträge: 1
Registriert: 23. August 2004 17:09
Kontaktdaten:

QT ListView Sortierung

Beitrag von BSW »

Ich hab Probleme mit einem Listview
Das Listview sollte so aussehen

Text1
+Text2
++Text3.1
++Text3.2
++Text3.3

Sie sieht aber so aus:
Text1
+Text2
++Text3.1
+++Text3.2
++++Text3.3

Was habe ich in meinem Code falschgemacht?
Ich hab eine Liste erstellt ung gehe diese mit einer for-Schleife mit dem Parameter list.at(i) durch!

Vielleicht kann mir hier einer helfen? Ich bin ratlos :confused:

Code: Alles auswählen

QPtrList<CicdNode> list;
list.setAutoDelete( TRUE );
list.append( new CicdNode(&test,"Symptome und abnorme ...","Kapitel 9",1,0) );
list.append( new CicdNode(&test,"Allgemeinsymptome","R50",0,2) );
list.append( new CicdNode(&test,"Fieber unbekanter Ursache","R50.-",0,0) );
list.append( new CicdNode(&test,"Fieber mit Schüttelfrost","R50.0",0,0) );
list.append( new CicdNode(&test,"Anhaltendes Fieber","R50.1",0,0) );
list.append( new CicdNode(&test,"Fieber, nicht näher bezeichnet","R50.9",0,0) );
ICD10LView->clear();
ICD10LView->setSorting(-1);
ICD10LView->setRootIsDecorated( TRUE );
for (uint i = 0; i< list.count();++i)
{
	if ( list.at(i) )
	{
		if( ( (list.at(i)->isSymptom==2) || (list.at(i)->isSymptom==0) ) && (list.at(i)->isDisease!=1) )
		{
			if((ICD10LView->currentItem() == NULL) )
			{
				QListViewItem *p_item = new QListViewItem( ICD10LView, list.at(i)->text, list.at(i)->code );
				p_item->setOpen( TRUE );
			}
			else
			{
				if(list.at(i)->isSymptom < list.at(i-1)->isSymptom)
				{
					QMessageBox::critical( this, "ERROR","Erstes Child erstellen");	
					QListViewItem *sub_item = new QListViewItem( ICD10LView->currentItem(), 0);
					sub_item->setText(0, list.at(i)->text);
					sub_item->setText(1, list.at(i)->code);
					sub_item->setOpen( TRUE );
				}
				//Kinder beim ersten Kind einfügen
				else if( (list.at(i)->isSymptom == list.at(i-1)->isSymptom) && i==3)						
				{
					QMessageBox::critical( this, "ERROR","List = List-1");
					QListViewItem *sub_item2 = new QListViewItem( ICD10LView->lastItem()/*ICD10LView->currentItem()*/, 0/*ICD10LView->lastItem()*/ );
					sub_item2->setText(0, list.at(i)->text);
					sub_item2->setText(1, list.at(i)->code);
				}
				else
				{
					QMessageBox::critical( this, "ERROR","List = List-1 new S3");
					QListViewItem *sub_item3 = new QListViewItem( ICD10LView->lastItem()/**/, ICD10LView->lastItem() );
					sub_item3->setText(0, list.at(i)->text);
					sub_item3->setText(1, list.at(i)->code);
				}
			}
		}
	}
}
miketech
Beiträge: 125
Registriert: 3. August 2004 11:19

Beitrag von miketech »

Hi,

also ich habe das so verstanden, dass z.B. bei:

new QListViewItem( ICD10LView->lastItem()/**/, ICD10LView->lastItem() );

ein neues Element erstellt wird, welches als Vater ICD10LView hat. D.h es ist ganz klar, dass es also unter das letzte Element eingefügt wird. Der zweite Eintrag bestimmt zwar das Element, hinter welches Dein neu erstelltes Item eingefügt werden soll, jedoch ist Parent ja schon darauf gesetzt. Versuch doch mal:

new QListViewItem( ICD10LView, ICD10LView->lastItem() );

Dann wird als parent die QListView genommen und das neue Item hinter dem Element ICD10LView->lastItem() eingefügt.

Das sollte gehen, wenn Du nur eine Ebene in die Tiefe willst, weil dann immer die QListView das Parent ist. Willst Du noch mehr in die Tiefe gehen, könnte vielleicht sowas klappen:

new QListViewItem( ICD10LView->lastItem()->parent(), ICD10LView->lastItem() );

Damit fügst Du das neue Item in die selbe Höhe ein, wie das zuletzt eingefügte Element und hängst es hinten dran.

Gruß

Mike
pm_Snake
Beiträge: 86
Registriert: 7. September 2004 11:33

Beitrag von pm_Snake »

Ich habe gerade ein ähnliches Problem. Nachdem ein Text eines Items editiert wurde, soll sich die Liste neu sortieren. Hab schon alle möglichen Arten versucht, nichts half. Das einzige was ich mir jetzt noch realistisch vorstellen könnte wäre, 2 mal den klick auf den ColumnHeader zu emulieren, dadurch würde sich die Liste wieder richtig sortieren. Aber ist das der Weg den die Trolle dafür vorgesehen haben?
>>[-]>[-]>[-]>[-]<<<<<[->>+<-[>>>]>[[<+>-]>+>>]<<<<<]
pm_Snake
Beiträge: 86
Registriert: 7. September 2004 11:33

Beitrag von pm_Snake »

Hat sich eben erledigt. Hatte übersehen das die QListView-klasse auch ne Funktion sort() hat... Dachte die gäbe es nur am Item :)
>>[-]>[-]>[-]>[-]<<<<<[->>+<-[>>>]>[[<+>-]>+>>]<<<<<]
Antworten