Seite 1 von 1

QListViewItem am Ende einfügen

Verfasst: 14. Februar 2005 10:42
von Matida
Hallo,

ich bin neu auf dem Gebiet der Qt-Programmierung und versuche mir eine Liste aus den Einträgen einer cfg-Datei zu erstellen.

Allerdings werden die Einträge immer an der ersten Position der Liste eingefügt. (Daher auch die Rückwärtszählende For-Schleife)
Wie kann ich die Einträge an der letzten Stelle der Liste einfügen?

Mein verwendeter Quellcode sieht folgendermaßen aus:

QString msg, temp;
QFile file( "SSDFObjekt.cfg" );
QTextStream ConfigFile( &file );
QString zeile, empty, nameItem, nameObject, nameGroup
QString nameTyp;
QChar zeichen;
unsigned int anzahl;

QListViewItem *typ;
QListViewItem *object;
QListViewItem *group;
QListViewItem *item;

// ListView
selectObjects = new QListView( centralWidget(), "gewählte Objekte" );
selectObjects->addColumn( "Objekt" );
selectObjects->addColumn( "Typ" );
selectObjects->setMinimumHeight( LIST_HEIGHT );
selectObjects->setMinimumWidth( LIST_WIDTH );
selectObjects->setAllColumnsShowFocus( true );

allObjects = new QListView( centralWidget(), "mögliche Objekte" );
allObjects->addColumn( "Objekt" );
allObjects->addColumn( "Typ" );
allObjects->setMinimumHeight( LIST_HEIGHT );
allObjects->setMinimumWidth( LIST_WIDTH );
allObjects->setAllColumnsShowFocus( true );
allObjects->setSorting( -1 );
//End ListView

// Label
selectLabel = new QLabel( "<b>ausgewählte Objekte<b>", central, "selectLabel" );
allLabel = new QLabel( "<b>mögliche Objekte<b>", central, "allLabel" );
selectLabel->setFixedHeight( 30 );
allLabel->setFixedHeight( 30 );
//End Label

nameTyp = "SSDFObjekt";
typ = new QListViewItem( allObjects, nameTyp );

for( anzahl=MAX_SSDFOBJEKT; anzahl>0; anzahl--) {
nameObject = "SSDFObjekt";
nameObject = nameObject.append( temp.setNum( anzahl ) );
object = new QListViewItem( typ, nameObject );

if ( !file.open( IO_ReadOnly ) ) {
msg = "Konfigurationsdatei '" + file.name() + "' kann nicht geöffnet werden.";
QMessageBox::warning(0, "Fehler beim Öffnen der Datei", msg, QMessageBox::Ok, 0);
}
while ( !ConfigFile.atEnd() ) {
zeile = ConfigFile.readLine();
zeichen = zeile.at(0);

empty = "";
switch ( zeichen ) {
case '%' : break;
case '+' :
{
nameGroup = empty;
i = 1;
while( i < zeile.length() ) {
nameGroup.append( zeile.at(i) );
i++;
}
group = new QListViewItem( object, allObjects->lastItem(), nameGroup );
} break;
default :
{
nameItem = empty;
i = 0;
while( i < zeile.length() ) {
nameItem.append( zeile.at(i) );
i++;
}
item = new QListViewItem( group, nameItem );
}
}
}
file.close();
}

Verfasst: 14. Februar 2005 17:41
von ArneStocker
Hi Matida

also wenn Du im Konstruktor als zweiten Parameter NULL übergibst, wird das ListViewItem an den Anfang gestellt. Übergibst Du statt dessen den Zeiger auf das letzte ListViewItem, wird es hinten angehängt

Code: Alles auswählen

QListViewItem *pNewItem = new QListViewItem(pView,pLastItem, ... );
Allerdings musst Du (soweit gewünscht) noch den Sortiermodus abschalten. Ich glaube das geht mit

Code: Alles auswählen

pView->setSorting(-1);
Gruss Arne

Verfasst: 15. Februar 2005 08:27
von Matida
Danke erst mal.

Allerdings funktioniert das bei mir nicht. Durch die Benutzung von lastItem() ändert sich nichts.

Mein Aufruf sieht so aus:

QListView *allObjects;
QListViewItem *group;
QListViewItem *item;

item = new QListViewItem( group, allObjects->lastItem(), nameItem );

Verfasst: 15. Februar 2005 09:50
von FlorianBecker
Hallo,

rufst du es zufällig damit auf:
QListViewItem::QListViewItem ( QListView * parent, QListViewItem * after, QString label1, QString label2 = QString::null, QString label3 = QString::null, QString label4 = QString::null, QString label5 = QString::null, QString label6 = QString::null, QString label7 = QString::null, QString label8 = QString::null )?
Dann musst natürlich als after das letzte ListItem aus DEM listview nehmen und nicht aus dem anderen.

MfG

Verfasst: 15. Februar 2005 10:29
von Matida
Danke für die Hilfe :D

Manchmal ist man etwas schwer von Begriff.

Verfasst: 15. Februar 2005 11:10
von FlorianBecker
Naja, also aus meiner Erfahrung heraus, muss ich sagen, es gibt schon ein paar böse Dinge im laufe eines Entwicklerlebens.

Das ist völlig normal.

Verfasst: 16. Februar 2005 09:48
von jaegermeister
hi
hast du bei den Items das parent richtig angegeben?
LastItem gibts das letzte das zum ListView gehört zurück. (glaub ich) =)

mfg jaegermeister