QAction / objectName
-
Hallo,
der Qt-Designer treibt mich gerade in den Wahnsinn: ich habe mir mit dem Designer ein Hauptfenster erstellt (QMainWindow), welches eine Menüleiste (QMenuBar) enthält. Die entsprechende Klasse soll alle Menüeinträge (QAction) automatisch initialisieren, d.h. die Signal-Slot-Verbindungen einrichten. Alle Action-Objekte der Menüs sollen dabei mit dem Slot "processAction" verbunden werden.
Die entsprechende Methode wird durch den Konstruktor der Fensterklasse aufgerufen und sieht aktuell so aus:
bool MainFrame::initMenus_r(QObject *pObject) { // Kinder der Menübar, bzw. des Menüs ermitteln QObjectList childrenList = pObject->children(); // Alle Kinder durchlaufen... foreach (QObject *pLoopingObject, childrenList) { // Rekursion this->initMenus_r(pLoopingObject); // switch (CLASSTYPE(pLoopingObject)) { case ClassType::QAction : QAction *pAction = (QAction*)pLoopingObject; CONNECT(pAction, SIGNAL(triggered()), this, SLOT(processAction())); break; } // switch } // next return true; }
Da sind einige Dinge durch Makros übersteuert, aber ich denke ihr versteht den Code trotzdem
Mein Problem ist QObject::connect (CONNECT) liefert mir "true" zurück, pAction->objectName() einen leeren String.
Ich bin langsam etwas ratlos, aber vielleicht hatte hier jemand schon ein ähnliches Problem?
-
Hmm... so funktionierts (diesmal nur der relevante Ausschnitt):
QMenu *pMenu = dynamic_cast<QMenu*>(pObject); QList<QAction*> actionList = pMenu->actions();
Statt QObject::children() verwende ich also QMenu::actions(). Beide Varianten liefern mir die Action-Objekt zurück, aber nur die letztere funktioniert. Werde das jetzt gleich nochmal debuggen und schauen ob es sich dabei um dieselben Adressen handelt. Denn mein Problem ist damit zwar gelöst, aber verstehen tue ich es trotzdem nicht