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();
}
QListViewItem am Ende einfügen
-
ArneStocker
- Beiträge: 300
- Registriert: 3. November 2004 16:15
- Wohnort: Berlin
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
Allerdings musst Du (soweit gewünscht) noch den Sortiermodus abschalten. Ich glaube das geht mit
Gruss Arne
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, ... );
Code: Alles auswählen
pView->setSorting(-1);
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
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
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
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
-
jaegermeister
- Beiträge: 70
- Registriert: 11. August 2004 07:44
- Wohnort: Bergen auf Rügen
- Kontaktdaten: