Seite 1 von 1

QPtrList<QListViewItem> .... return lst;

Verfasst: 11. April 2005 15:29
von ChMaster
hallo zusammen, kleines problemchen mit QPtrList ;)

habe das mal als bsp genommen um meine listview auszulesen bzw
welches item ich gerade anklicke.

Code: Alles auswählen

// den ausgewählten listeintrag ermitteln
QPtrList<QListViewItem> *getSelectedItems( QListView *lv ){
       if( !lv )
          return 0;
          
       // ... lege ein QList-Objekt an
       QPtrList<QListViewItem> *lst = new QPtrList<QListViewItem>;
       
       // durchlaufen aller Listeinträge
       QListViewItemIterator it( lv );
       for( ; it.current(); ++it )
          if ( it.current()->isSelected() )
             lst->append( it.current() );
       return lst;
}
und so rufe ich es auf:
bringt aber nen fehler, wie bekomme ich es hin das er das macht
was ich will :)

Code: Alles auswählen

if( getSelectedItems( lv_All )->current() == "blabla" ){
     //.....
}else if( getSelectedItems( lv_All )->current() == "blabla" ){
    //.....
}
in der Doku finde ich nix passends ausser current(), append() kann ich
nicht benutzen da er es dann anhängt, at() und find() weiss ich ich nicht
ob ich benutzen kann. erbitte um hilfe ;)

Re: QPtrList<QListViewItem> .... return lst;

Verfasst: 11. April 2005 16:31
von Goos
ChMaster hat geschrieben: bringt aber nen fehler, wie bekomme ich es hin das er das macht
was ich will :)
Kann ich nachvollziehen, ich versteh auch nicht was du willst :D

Goos

Verfasst: 11. April 2005 16:41
von ChMaster
ListView: was besseres als bsp viel mir für die einträge der ListView nicht ein) :lol:

Code: Alles auswählen

BlaBla
|>Bla
|   |> blib
|   |> blob
|>Blong
|   |>bling
|   |>blung
.....
Blabbubberon
|>blibber
|   |>blubber
|   |>knuddel
|>blober
|   |>...
|   |>...

usw.
wenn ich jetzt BlaBla aufklappe und dann Bla aufklappe und auf blib
drücke soll er was ausführen, bei Blabbubberon genauso, aber wie?

(mit der oberen funktion lese ich das ausgewählte item aus, sprich
was gerade angeklickt wurde)

Verfasst: 11. April 2005 16:49
von Goos
Ich glaub ich versteh dich noch immer nicht so richtig.
Ne QListView schickt dir doch ein clicked() Signal mitsam einem Pointer auf das entsprechende QListViewItem.
Wieso versuchst du also irgendwie über dein ListView zu iterieren? :)

Goos

Verfasst: 11. April 2005 18:53
von ChMaster
jup das clicked() signal ist auch vorhanden:

connect( lv_All, SIGNAL( clicked(QListViewItem*) ), this, SLOT( slotListViewClicked() ) );

hab da nen screenshot erstellt

wenn ich jetzt Arawnritter aufklappe kommen 2 unter items, nun klick ich
auf Fluchlord und nun soll er mir den text vom Fluchlord anzeigen, klicke
ich auf Kampfmeister soll er mir den text vom Kampfmeister anzeigen usw.

dazu muss ich wissen ob Fluchlord angeklickt wurde ...

Verfasst: 12. April 2005 08:34
von Goos
ChMaster hat geschrieben: connect( lv_All, SIGNAL( clicked(QListViewItem*) ), this, SLOT( slotListViewClicked() ) );
...und faellt dir was auf hier?
Wenn dir dein Signal einen QListViewItem Pointer geben moechte, wieso nimmt ihn dein Slot nicht an? ;)
Haettest du einen Slot slotListViewClicked(QListViewItem*), dann wuesstest auch was gerade geklickt wurde.

Goos

Verfasst: 12. April 2005 12:39
von ChMaster
stimmt, daran habe ich nicht gedacht ;)
ok habe es geändert
connect( lv_All, SIGNAL( clicked(QListViewItem*) ), this, SLOT( slotListViewClicked(QListViewItem*) ) );

Code: Alles auswählen

void QDAoCGR_MasterLevel::slotListViewClicked(QListViewItem *currentItem)
{
     QString kpm = "Kampfmeister";
     QListViewItemIterator it( lv_All );
     while( it.current() ){
           /*QListViewItem **/currentItem = it.current();
           if ( currentItem->isSelected() == kpm ){                
                QMessageBox::information( this, "ToA - ML", "Kampfmeister" );           
           }else{
                 ++it;
           }
     }
}
nix passiert, vorher hat der wenigstens die MsgBox angezeigt (aber unendlich) ;)
entweder ich bin zu <zensiert></zensiert> oder ich rafs nich ...

Verfasst: 12. April 2005 12:58
von Goos
ChMaster hat geschrieben:

Code: Alles auswählen

void QDAoCGR_MasterLevel::slotListViewClicked(QListViewItem *currentItem)
{
     QString kpm = "Kampfmeister";
     QListViewItemIterator it( lv_All );
     while( it.current() ){
           /*QListViewItem **/currentItem = it.current();
           if ( currentItem->isSelected() == kpm ){                
                QMessageBox::information( this, "ToA - ML", "Kampfmeister" );           
           }else{
                 ++it;
           }
     }
}
nix passiert, vorher hat der wenigstens die MsgBox angezeigt (aber unendlich) ;)
Ich glaub du raffsts nicht ;)
currentItem ist doch schon das gerade selektierte QListViewItem.
Den zugewiesenen Text kannst dann doch einfach per currentItem->text(Spalte) bekommen.
Ob der dann allerdings "Kampfmeister" ist haengt natuerlich davon ab, worauf du klickst ;)

Goos

Verfasst: 12. April 2005 13:21
von ChMaster
es funktioniert, ich könnt dich knuddeln :P
es gibed doch noch genies 8)

Code: Alles auswählen

QString kpm = "Kampfmeister";
     QListViewItemIterator it( lv_All );
     while( it.current() ){
           if ( lv_All->currentItem()->text(0) == kpm ){
                QMessageBox::information( this, "ToA - ML", "Kampfmeister" );           
           }else{
                 ++it;
           }
     }

Verfasst: 12. April 2005 13:34
von Goos
ChMaster hat geschrieben:es funktioniert, ich könnt dich knuddeln :P
Ich hoff, du bist weit weit weg :shock:

Goos

Verfasst: 12. April 2005 13:38
von ChMaster
Goos hat geschrieben: Ich hoff, du bist weit weit weg :shock:
siehe Wohnort :lol:
aber ich dank dir drotzdem für deine hilfe.