QListViewItem am Ende einfügen

Alles rund um die Programmierung mit Qt
Antworten
Matida
Beiträge: 3
Registriert: 14. Februar 2005 10:25

QListViewItem am Ende einfügen

Beitrag 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();
}
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag 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
Matida
Beiträge: 3
Registriert: 14. Februar 2005 10:25

Beitrag 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 );
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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
Matida
Beiträge: 3
Registriert: 14. Februar 2005 10:25

Beitrag von Matida »

Danke für die Hilfe :D

Manchmal ist man etwas schwer von Begriff.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
jaegermeister
Beiträge: 70
Registriert: 11. August 2004 07:44
Wohnort: Bergen auf Rügen
Kontaktdaten:

Beitrag 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
Wie könnten ja wenn wir wollten, aber wie wollen ja nicht.
Antworten