[gelöst] Fehl. in eigen. Klasse Object::connect:No such slot
Verfasst: 26. August 2007 22:30
Hallo zusammen,
ich habe ein Problem. Ich schreibe gerade ein neues Programm und wollte das triggered Signal von verschiedenen QActions in einer QMenuBar elegant in einer Routine lösen.
Ich habe also eine Ableitung der QMenuBar geschrieben und dort eine Routine MenuClick(QWidget * Sender) implementiert. Folgender Code:
Header:
Source:
Aufruf der statischen Routine enhMenuBar::initMenuBar(QWidget * parent) im Konstruktor meines MainWindows, was eine Ableitung von QMainWindow ist:
Beim Start des Programms bekomme ich folgenden Fehler:
Ich verstehe nicht warum er MenuClick in QMenuBar sucht und nicht in meiner Ableitung.
Bestimmt weiß hier jemand Rat...
Danke
Robin
ich habe ein Problem. Ich schreibe gerade ein neues Programm und wollte das triggered Signal von verschiedenen QActions in einer QMenuBar elegant in einer Routine lösen.
Ich habe also eine Ableitung der QMenuBar geschrieben und dort eine Routine MenuClick(QWidget * Sender) implementiert. Folgender Code:
Header:
Code: Alles auswählen
#ifndef __ENHACTION
#define __ENHACTION
#include <QMenuBar>
class mainForm;
class QAction;
class enhMenuBar : public QMenuBar {
public:
enhMenuBar(QWidget * parent);
~enhMenuBar();
static enhMenuBar * initMenuBar(QWidget * parent);
private:
void initMenus();
void initActions();
private slots:
void MenuClick(QWidget *Sender);
};
#endif
Code: Alles auswählen
#include <QSignalMapper>
#include <QAction>
#include "Menus.h"
enhMenuBar::enhMenuBar(QWidget * parent) : QMenuBar(parent) {
}
enhMenuBar::~enhMenuBar() {
}
enhMenuBar * enhMenuBar::initMenuBar(QWidget * parent) {
enhMenuBar *menubar = new enhMenuBar(parent);
menubar->setObjectName("MeineMenuBar");
menubar->initMenus();
return menubar;
}
void enhMenuBar::initMenus() {
QMenu *submenu;
//Menü Datei einrichten
submenu = this->addMenu(tr("&Datei"));
submenu->addSeparator();
submenu->addAction(tr("Beenden"));
//Menü Bearbeiten einrichten
submenu = this->addMenu(tr("Bearbeiten"));
submenu->addAction(tr("Kopieren"));
submenu->addAction(tr("Einfügen"));
this->initActions();
}
void enhMenuBar::initActions() {
QSignalMapper *signalMapper = new QSignalMapper(this);
QList<QAction *> allActions = this->findChildren<QAction *>();
foreach(QAction *tmpAction, allActions) {
connect(tmpAction, SIGNAL(triggered()), signalMapper, SLOT(map()));
signalMapper->setMapping(tmpAction, tmpAction);
}
connect(signalMapper, SIGNAL(mapped(QWidget *)),
this, SLOT(MenuClick(QWidget *) ));
}
void enhMenuBar::MenuClick(QWidget *Sender) {
qDebug(qPrintable(Sender->objectName()));
}
Code: Alles auswählen
setMenuBar(enhMenuBar::initMenuBar(this));
Code: Alles auswählen
Object::connect: No such slot QMenuBar::MenuClick()
Bestimmt weiß hier jemand Rat...
Danke
Robin