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

Alles zur Entwicklung von KDE - Anwendungen
Antworten
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

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

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Q_OBJECT vergessen würde ich sagen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag 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.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
Antworten