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
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)
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
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
Ich hoff, du bist weit weit weg
Goos
Verfasst: 12. April 2005 13:38
von ChMaster
Goos hat geschrieben:
Ich hoff, du bist weit weit weg
siehe Wohnort
aber ich dank dir drotzdem für deine hilfe.