Problem mit Slots

Alles rund um die Programmierung mit Qt
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

#include<mywindow.moc> ist total falsch - zumindest wenn man qmake benutzt. Aber das habe ich schon weiter oben gesagt.

Des weiteren gibt es die [

Code: Alles auswählen

] - tags damit man deinen Code besser lesen kann.

/edit: MyWindow::quit() gibt es nicht - was erwartest Du?
Zuletzt geändert von Christian81 am 29. Mai 2008 17:27, insgesamt 1-mal geändert.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Nochmal schritt für Schritt:

Du darfst die Moc Datei nirgendwo inkludieren.
Du fügst die Headerdatei zu den Header innerhalb deiner .pro Datei ein.
Du führst "qmake" aus.
Du führst "make" aus.

Er kompiliert und du hast deine .exe. Es klingt danach das CodeBlocks noch einmal kompiliert, und das zweite mal schlägt fehl.
code_specialist
Beiträge: 10
Registriert: 26. Mai 2008 16:19

Beitrag von code_specialist »

Vielen Dank für dein post, schein als hätten wir aneinander vorbeigechattet, wie man so schön sagt. Ich hab "make" dank deiner Hilfe zum laufen bekommen, es gibt keine Fehlermeldungen mehr, da ich die .pro Datei entsprechend verändert habe. Danach habe ich das Projekt NICHT noch einmal mit Code::Blocks übersetzt, um Fehler zu vermeiden. Wenn ich die .exe jetzt starte kommt allerdings wieder in der Konsole hinter dem Qt Fenster wieder folgene Nachricht:

Object::connect: No such slot MyWindow::quiet()

hmm...langsam gehen mir die Ideen aus, ich hoffe euch nicht. Ich bin jedoch schon sehr froh darüber, dass wir "make" zum laufen gebracht haben. Ich hoffe ihr helft mir weiterhin,es ist für mich echt wichtig, dass Qt läuft
mfg code_specialist
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Dann geht doch jetzt wieder alles, also das kompilieren.

Die Fehlermeldung ist übrigens ok so, was erwartest du denn auch?
Weder QMainWindow, noch QWidget oder eines der sonstigen geerbten Klassen hat den Slot "quit", und du selbst definierst ihn nicht. Also versuchst du zu einen nicht existenten Slot zu verbinden, deswegen die Fehlermeldung.


Edit: Christian du bist zu langsam. :P
Zuletzt geändert von PeterLustig am 29. Mai 2008 17:51, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Zum zweiten mal - was willst Du? Es gibt keinen slot MyWindow::quit() (und quiet schon gar nicht) - und das sagt Dir Qt. Es gibt nur einen Slot QCoreApplication::quit() !
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
code_specialist
Beiträge: 10
Registriert: 26. Mai 2008 16:19

Beitrag von code_specialist »

Sorry, ich hab leider ein paar posts überlesen. Ich hab jetzt also

connect( button1, SIGNAL( clicked() ),
this, SLOT( quit() ) );

durch

connect( button1, SIGNAL( clicked() ),
this, SLOT( QCoreApplication::quit() ) );

ersetzt. Danach wieder alles schön brav mit make übersetzt. Leider reagiert der "Beenden" Button immer noch nicht. Entschuldigt wenn ich schon wieder einen simplen Anfängerfehler begehe, aber ich bin in sachen Qt4 leider noch blutiger Anfänger.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Hast du überhaupt die geringste Ahnung was connect() macht und was man dort übergeben muss?
http://doc.trolltech.com/4.3/signalsandslots.html
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
code_specialist
Beiträge: 10
Registriert: 26. Mai 2008 16:19

Beitrag von code_specialist »

Nun, connect verbindet 2 Objekte miteinander. Tritt bei dem ersten Objekt ein bestimmter Zustand ein (signal emitted), wird eine bestimmte Funktion aufgerufen(unter Qt als Slot bekannt).

Anderes Thema:
Es scheint, als wüsstest du woher die Fehler in meinem Quellcode kommen. Ich bitte dich darum, mir zu sagen wie das problematische connect Beispiel richtig aussehen sollte. Es würde mir sehr weiterhelfen,
mfg code_specialist
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Der Empfänger ist bei dir immer noch MyWindow und nicht QCoreApplication::instance() und das Signal heisst immer noch quit() und nicht das was Du schreibst.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
code_specialist
Beiträge: 10
Registriert: 26. Mai 2008 16:19

Beitrag von code_specialist »

Vielen Dank für eure unzähligen Tipps, das hier ist ein tolles Forum. Ich hab den Code zum laufen bekommen. Die betroffene Zeile muss wie folgt aussehen:


connect( button1, SIGNAL( clicked() ),
QCoreApplication::instance(),
SLOT( quit() ) );

Und nochmals vielen Dank für eure Geduld,
mfg code_specialist
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Übrigens, "qApp" ist ein Zeiger der immer auf die Instance deiner QApplication zeigt, den kannst du statt QCoreApplication::instance nutzen.
Antworten