qt popupmenu

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ZzLeCzZ
Beiträge: 245
Registriert: 15.12.2003 19:34:00

qt popupmenu

Beitrag von ZzLeCzZ » 13.10.2005 00:08:25

hi,
ich hab eine QListBoxI beim click auf ein item soll ein menu erscheinen in dem ich eine function aussuchen kann dies klappt auch schon soweit:

Code: Alles auswählen

void ListBoxDemo::popup(QListBoxItem* Item, const QPoint & point)
{
        menu->insertItem("About", this, SLOT(function()));
        menu->popup( point );
}
jetzt möchte ich der Function aber das Item uebergeben um z.b das item anzuzeigen:

Code: Alles auswählen

void ListBoxDemo::popup(QListBoxItem* Item, const QPoint & point)
{
        menu->insertItem("About", this, SLOT(function(QListBoxItem*)));
        menu->popup( point );
}

void ListBoxDemo::function( QListBoxItem * Item)
{
 QMessageBox::about(this, "Hello",Item->text ());
}
das klappt allerdings nicht :-( wie kann ich dem menu jetzt beibringen welches item angeklickt worden ist?

thx

Benutzeravatar
BeS
Moderator
Beiträge: 3236
Registriert: 17.04.2002 18:30:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von BeS » 13.10.2005 00:21:07

Hallo,
ich habe schon lange nichtsmehr mit Qt gemacht. Aber ich denke das Problem ist, dass hier ein normales clicked-Signal ausgelöst wird und dieses übermittelt keine weiteren Daten, also kann auch der slot keine Daten aufnehmen.

Aber das Element ist danach doch auch ausgewählt, d.h. du könntest in deiner function() einfach abfragen, welches Element in der listbox gerade ausgewählt ist.
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support

Ich spreche von Freier Software!

ZzLeCzZ
Beiträge: 245
Registriert: 15.12.2003 19:34:00

Beitrag von ZzLeCzZ » 13.10.2005 10:04:02

thx so gehts!

Code: Alles auswählen

void ListBoxDemo::popup(QListBoxItem* Item, const QPoint & point)
{
        if( Item )
        menu->popup( point );
}

void ListBoxDemo::aboutApp( )
{
 int id=listbox->currentItem ();
 QListBoxItem* Item=listbox->item(id);
 QMessageBox::about(this, "Hello",Item->text ());
}
so ist es auch eleganter da ich vorher ja immer einen neuen menueintrag hinzufuegen muesste..

ZzLeCzZ
Beiträge: 245
Registriert: 15.12.2003 19:34:00

Beitrag von ZzLeCzZ » 16.10.2005 23:27:23

hab noch eine frage zu der listbox:
Wie kann ich einem Item ein Objekt zuordnen?
über die id ist irgendwie schierig da diese sich ändern kann...
Ich würde gern ein Zeiger oder so auf eine Objekt mit dem Item verbinden...

EDIT: warscheinlich so:
http://doc.trolltech.com/3.0/listboxcom ... html#x1285?

ZzLeCzZ
Beiträge: 245
Registriert: 15.12.2003 19:34:00

Beitrag von ZzLeCzZ » 17.10.2005 19:04:36

Hi hab jetzt ein eigenes MyListBoxItem erstellt und hab die ListBox folgender massen connected:

Code: Alles auswählen

connect( listbox, SIGNAL( clicked ( QListBoxItem *, const QPoint &  ) ), this, SLOT( popup(QListBoxItem *, const QPoint &) ) );
eigendlich muesste es aber doch so heissen:

Code: Alles auswählen

connect( listbox, SIGNAL( clicked ( MyListBoxItem *, const QPoint &  ) ), this, SLOT( popup(MyListBoxItem *, const QPoint &) ) );
Die erste Moeglichkeit funktioniert zwar aber der compiler meckert:
"Warnung: »struct QUBuffer« hat virtuelle Funktionen aber nicht-virtuellen Destruktor"
Das liegt wohl daran das MyListBoxItem nicht connected ist und daher auch nicht automatishc deleted wird...

wie kann ich das Problem am elegantesten umgehen? ist die Warnung schlimm?

Antworten