[gelöst] Qt-PopupMenus
Verfasst: 28. Juni 2005 14:33
Hallo,
habe mal eine Frage zu den PopupMenus:
Ich möchte ein QPopupMenu haben, von dem ein Menu-Punkt abgeht, der sich je nach angewählten ListViewItem (PopupMenu erscheint, wenn man ein ListViewItem rechtsklickt) unterscheidet und im Prinzip die zum ListViewItem gehörigen Tabellen-Einträge auflistet. Das klappt auch ganz gut:
Wenn ich jetzt aber meinen Methode showCanMapper(QString, unsigned int) habe und auf den Menu-Punkt klicke, dann springt er da garnicht rein. Habe natürlich erst gedacht, im Designer wäre der Slot nicht richtig initialisiert, aber daran liegt es nicht. Selbst, wenn ich das Ding auf showCanMapper(QString) vereinfache, dann springt er über das PopupMenu nicht rein. Nur, wenn ich ohne Parameter aufrufe, geht das. Versuche ich die Methode in meiner Klasse einfach über showCanMapper("QSTRING") aufzurufen, geht es aber. Warum geht das also nicht über einen Slot in meinem PopupMenu? Darf man über den Slot keine Parameter übergeben? Wie macht man dann dynamische Menus? Zu meiner Aufgabe, die zu bewältigen gilt:
Im Prinzip habe ich ein ListViewItem (mehrere natürlich), zB LV1, an das unterschiedlich viele Untereinträge in einer Tabelle bestehen: UE1, UE2
LV1
-> UE1
-> UE2
und da es je nach Item unterschiedlich viele UEs gibt und diese dann natürlich per Funktion (zB LÖSCHEN) angesprochen werden sollen, muss dieses Menu dynamisch sein, da der Nutzer auswählen darf, welchen UE er löschen, verändern will und das kann ich dann ja nicht anders lösen, oder? Hoffe, Ihr habt das verstanden und könnt mir wieder einmal helfen!
habe mal eine Frage zu den PopupMenus:
Ich möchte ein QPopupMenu haben, von dem ein Menu-Punkt abgeht, der sich je nach angewählten ListViewItem (PopupMenu erscheint, wenn man ein ListViewItem rechtsklickt) unterscheidet und im Prinzip die zum ListViewItem gehörigen Tabellen-Einträge auflistet. Das klappt auch ganz gut:
Code: Alles auswählen
void KonfiguratorMainWindowImpl::popupMenuOutput()
{
QString text;
if (outputListView->currentItem()!=0)
{
QPopupMenu* canMenu = new QPopupMenu( this );
Q_CHECK_PTR( canMenu );
QPopupMenu *submenu = new QPopupMenu( this );
Q_CHECK_PTR( submenu );
canMenu->insertItem(addIdent, "Add CAN-Identifier", this, SLOT(newCanEntrySlot()), tr("Ctrl+E"));
canMenu->insertItem(addDataField, "Complete CAN-Data",this, SLOT(completeIdentifierEntrySlot()));
canMenu->insertItem( showCanMapper, "Show associated Modbus-Entry", submenu ); // das Untermenu mit dem dynamischen Einträgen
canMenu->insertSeparator();
canMenu->insertItem(erase, "Remove",this, SLOT(eraseCanEntrySlot()), tr("DEL"));
getPtrListCanEntry();
for(int i=0; i<candata->data.anz; i++) // hier kommen die dynamischen Einträge, je nachdem, wieviele zugehörige TabellenEinträge es gibt (data.anz)
{
text=text.setNum(candata->data.dataBlock[0].byte_pos);
submenu->insertItem( "Start-Byte "+text,this, SLOT(showCanMapperSlot(candata->type, candata->data.dataBlock[i].reg_nr )));
}
canMenu->exec( QCursor::pos() );
delete canMenu;
}
}
Im Prinzip habe ich ein ListViewItem (mehrere natürlich), zB LV1, an das unterschiedlich viele Untereinträge in einer Tabelle bestehen: UE1, UE2
LV1
-> UE1
-> UE2
und da es je nach Item unterschiedlich viele UEs gibt und diese dann natürlich per Funktion (zB LÖSCHEN) angesprochen werden sollen, muss dieses Menu dynamisch sein, da der Nutzer auswählen darf, welchen UE er löschen, verändern will und das kann ich dann ja nicht anders lösen, oder? Hoffe, Ihr habt das verstanden und könnt mir wieder einmal helfen!