Nexx Geschrieben 19. September 2002 Teilen Geschrieben 19. September 2002 Sers Leutz, Ich erstelle zur Zeit in kleines Progrämmchen, in dem ich zur Laufzeit Menüs und Labels ... erstelle. Um diese jetzt mit Proceduren zu verbinden, habe ich ACTIONS erstellt und diese mit CONNECT an die Proceduren gebunden. Beim Compilieren läuft alles glatt, nur wenn das Programm startet und versucht, die Menues und den Rest zu initialisieren, dann bringt er mir für jeden CONNECT-Befehl eine Fehlermeldung: QObject::connect: No such slot Form1::gld_activated() QObject::connect: (sender name: "gld") QObject::connect: (receiver name: "form1") Form1 ist das QMainWindow das ich öffne und das Menu enthält. "gld" ist der Name des Menu-Punktes. Diese Meldung bringt er mir für jeden Menu-Punkt, den ich im Menu eingebaut habe, also für jeden CONNECT_Befehl, den ich im Source-Code eingebaut habe. Ich arbeite hier mit SUSE Linux 8.0 und dem GNU-Compiler. Bitte Helft mir weiter!!!! cu Nexx Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 19. September 2002 Teilen Geschrieben 19. September 2002 moc hast Du wahrscheinlich ausgeführt, oder? Gib mal ein Codebeispiel für einen connect-Aufruf, und die dazugehörigen Klassendeklarationen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Nexx Geschrieben 20. September 2002 Autor Teilen Geschrieben 20. September 2002 Also pass auf: Ich habe eine Klasse definiert fuer ein ganz normales QMainWindow, habe darin mit public slots: void gld_activated(); . . . . die Slots deklariert. In einer *.cpp File habe ich dann die Header-Datei eindebunden, in der die Klasse Form1 definiert wird. Hier stehen auch die Slots drinnen, in der Form: void Form1::gld_activated() { .... } In der selben cpp-File habe ich den Konstruktor fuer Form1 genauer definiert, in der Header steht nur der Prototyp. In diesem Konstruktor erstelle ich das Menu waehrend der Laufzeit, und xwar wie folgt: QAction *gldaction; gldaction=new QAction("GLD","Gld Menu",0,this,"gld"); connect(gldaction,SIGNAL(activated()),this,SLOT(gld_activated())); Und der Rest von der Menuerzeugung sieht wie folgt aus: QPopupMenu *gldmenu; gldmenu=new QPopupMenu(this); menuBar()->insertItem("Gld-Menu",gldmenu); gldaction->addTo(gldmenu); Das wars. Der Compiler meldet keinen Fehler, also kanns an der Deklaration theoretisch nicht liegen, oder? Erst wenn das Programm fertig compiliert ist, und gestartet wird, meldet mir das Programm weahrend der Laufzeit eben die Meldung, die ich dir schon gegeben habe. Die Menus sind deshalb auch ausser Funktion, er weiss ja nicht, wo er die Slots findet. Bei uns stehen alle vor einem Raetsel, wobei sich eigentlich keiner so richtig mit Qt auskennt. Qt wird erst bei uns eingefuehrt, unser Ausbildungsleiter geht auch erst naechste Woche auf Lehrgang. Ich hab also die Hilfe dringend noetig, sonst haengt das Projekt 'ne Woche in der Luft. Danke fuer dein Bemuehen, cu, Nexx Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 20. September 2002 Teilen Geschrieben 20. September 2002 Hast Du den moc über die Form1-Headerdatei laufen lassen? Wovon ist Form1 abgeleitet? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Nexx Geschrieben 20. September 2002 Autor Teilen Geschrieben 20. September 2002 Ich hab den moc gerade gefunden, und hab "moc form1.h" eingegeben, woraufhin er mir auf der shell mehrere Routinen ausspuckt, aber an der Header selbst nichts aendert. Unter diesen Routinen befindet sich auch eine, in welcher er meine Slots nochmal definiert, aber er speichert halt nichts ab. Benutzerfehler? Wie wende ich den moc sonst an? Im QT-Benutzerhandbuch steht zwar was drinnen ueber tmake und nmake fuer solche faelle, aber in unserem qt-verzeichnis ist nichts dergleichen zu finden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 20. September 2002 Teilen Geschrieben 20. September 2002 Genau kenne ich mich mit Qt auch nicht aus, was ich Dir hier sage, habe ich mir zusammengegoogelt . Jedenfalls scheint moc eine cpp-Datei zu generieren, die Du dann wohl mitkompilieren musst: moc -o abx_moc.cpp abc.h Hier habe ich einige Infos dazu gefunden: http://vrlab.epfl.ch/~bhbn/qt_presentation/presentation.html#SECTION00041000000000000000 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Nexx Geschrieben 20. September 2002 Autor Teilen Geschrieben 20. September 2002 Dank dir nochmal, hab sowas aehnliches schon ausprobiert. Unter www.trolltech.com gibts auch Infos zu diesem Thema. Hat aber beides nicht hingehauen. sobald ich dann die .moc oder die .cpp Datei, die ich mit moc erstellt habe einbindet, meldet mir der Compiler, dass die Routinen schon in einer .obj Datei vorhanden waeren, die sowieso schon mit eingebunden wird. Warum dann das Programm die Slots trotzdem nicht findet, weiss ich nicht. Danke nochmals fuer deine Hilfe, cu, Nexx Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.