Seite 1 von 1

Object::connect: No such slot KXmlGuiWindow::myActionSlot()

Verfasst: 31. Oktober 2010 12:08
von joebar
Hallo,

ich arbeite gerade durch das http://techbase.kde.org/Development/Tut ... g_KActions tutorial. Der Code 1:1 übernomen funktioniert. Jetzt möchte ich im File Menu einen weiteren Eintrag haben, dazu habe ich ein paar Ergänzungen gemacht, hier die wichtigsten:

Im rc File den Eintrag eingetragen:

Code: Alles auswählen

<MenuBar>    
<Menu name="file" >      
<Action name="clear" />    
<Action name="myAction" /> 
</Menu>  
</MenuBar> 
Ich sehe den Eintrag später auch im UI sollte also passen.

im mainwindow.h meinen Slot deklariert:

Code: Alles auswählen

  public slots:
    void myActionSlot();
in mainwindow.cpp meinen Slot implementiert:

Code: Alles auswählen

void MainWindow::myActionSlot()
{
qDebug() << "myAction";
}
und in setupActions() folgendes ergänzt:

Code: Alles auswählen

//... so wie im Tutorial bis hier plus:
  KAction* myAction = new KAction(this);
  myAction -> setText("Eintrag im UI");
  actionCollection()->addAction("myActionName", myAction);
  connect(myAction,SIGNAL(triggered(bool)),SLOT(myActionSlot()));
  
  
  setupGUI(Default, "tutorial2ui.rc");
Beim ausführen direkt beim start, kommt in der Konsole
Object::connect: No such slot KXmlGuiWindow::myActionSlot()
Object::connect: (sender name: 'myActionName')
Beim Auswählen des Menueintrags kommt gar nichts. Wieso ist der slot nicht vorhanden er ist doch definiert?

Mein zweites Problem ist addAction Funktion, dort habe ich den Namen "myActionName" vergeben, ich werde aus der KDE Doku aber nicht schlau wo dieser Name zu passen muß. Zum rc-xml File ja nicht da dort ja der Objektname der Aktion genutzt wird. Im Slot/Signal Zuweisung doch eigentlich auch nicht.

Danke,
J.

Verfasst: 31. Oktober 2010 13:17
von Christian81
Q_OBJECT vergessen würde ich sagen.

Verfasst: 31. Oktober 2010 15:02
von joebar
Stimmt, jetzt klappt es. Aber das "fehlte" ja auch schon im Tutorial wie ich jetzt gesehen habe, warum hat das Tutorial funktioniert, bzw. warum war es dort nicht notwendig?

Danke, J.

Verfasst: 31. Oktober 2010 15:06
von franzf
Das steht in der Doku (Assistant öffnen -> nach "Q_OBJECT" suchen):
The Q_OBJECT macro must appear in the private section of a class definition that declares its own signals and slots or that uses other services provided by Qt's meta-object system.
Im Beispiel wurde so etwas nicht verwendet, drum ist Q_OBJECT nicht notwendig.