Seite 1 von 1

[gelöst] Problem beim Hinzufügen eines weiteren Signal-Slots

Verfasst: 25. September 2007 02:17
von macpret
Hallo,

Ich habe mit meiner Studienarbeit angefangen QT für die Gestalltung von grafischen Oberflächen zu beginnen.
Hierzu verwende ich QT 4 mit Visual Studio Professional Edition.

Bis dato lief es auch mehr oder minder reibungslos. Habe auf einer Oberfläche mehrere weitere Oberflächen verlinkt, rufe mit verschiedensten Buttons verschiedenste andere Methoden (Slots) auf.

Nun wollte ich in dem Hauptfenster, welches sich direkt zu Beginn auftut noch einen neuen Button hinzufügen, mit welchen ich die Verbindung zum GPS-Modem aufbauen und trennen kann.
Die Klasse des Hauptfensters heißt MainWindow und liegt in den Dateien Window1.h und cpp.

In der Window1.h habe ich wie bei den anderen Slots auch
"void GPSSlot();" unter den "puplic slots:" eingebungen.
In der Window1.cpp ist ziemlich weit unten die Slot-Methode implementiert durch:
MainWindow::void GPSSlot()
{
... // Hier steht natürlich etwas mehr
}

und schließlich im Konstruktor der MainWindow steht neben den vielen anderen:
connect(pushButton_GPS, SIGNAL(clicked()), this, SLOT(GPSSlot()));

Ich kann es ohne Fehler kompilieren, jedoch steht dann direkt in der Kommando-Zeile folgender Fehler, welchen ich sonst lediglich kannte, wenn ich mich irgendwo beim Namen mal vertippt hatte (dieses Mal sind die Dateinamen allerdings kopiert!!!)

Object::connect: No such slot MainWindow::GPSSlot()
Object::connect: (sender name: 'm_action_GPS')
Object::connect: (receiver name: 'MainWindow')

Woran kann es liegen, dass er diesen Slot nun plötzlich nicht kennt?

In der moc_Window1.cpp ist dieser Slot leider unter:

int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)

nicht aufgeführt. Es liegt doch nicht daran, dass 26 Slots pro Fenster das Maximum darstellen, oder?

Wäre um Hilfe wirklich dankbar.

Gruß
Mac

Re: Problem beim Hinzufügen eines weiteren Signal-Slots

Verfasst: 25. September 2007 07:24
von macman
macpret hat geschrieben:connect(pushButton_GPS, SIGNAL(clicked()), this, SLOT(GPSSlot()));
Hier steht pushButton.
macpret hat geschrieben:Object::connect: No such slot MainWindow::GPSSlot()
Object::connect: (sender name: 'm_action_GPS')
Object::connect: (receiver name: 'MainWindow')
Und hier m_action_GPS. Die Fehlermeldung bezieht sich also nicht auf die Connection. Kann es sein das es da noch eine in einer anderen Klasse gibt?

Im übrigen heißt es Qt. Mit QT verbinde ich immer QuickTime.

Verfasst: 25. September 2007 11:56
von macpret
Ähm, das liegt daran, dass ich einen Button und ein Menü-Dingens mit dem Slot verbunden habe und in dem, was ich da abgetippt habe, hatte ich den Button auskommentiert.

ansonsten habe ich halt :

Object::connect: No such slot MainWindow::GPSSlot()
Object::connect: (sender name: 'm_action_GPS')
Object::connect: (receiver name: 'MainWindow')

und:

Object::connect: No such slot MainWindow::GPSSlot()
Object::connect: (sender name: 'pushButton_GPS')
Object::connect: (receiver name: 'MainWindow')

dort stehen.

Also das Problem besteht weiterhin.. Allerdings dennoch schonmals vielen Dank für das gewitze Auge :-)

Und ja.. natürlich: Qt :-)

Gruß
Mac

Verfasst: 25. September 2007 12:33
von macman
Tja, dann sehe ich so keinen Fehler. Manchmal hilft ein komplett neu compilieren, ansonsten müsste mehr her.

Verfasst: 25. September 2007 13:11
von macpret
Merkwürdiger Weise tritt dieser Fehler ebenso auf, wenn ich versuche nachträglich eine Slots umzubenennen.

Daher habe ich habe ich vorhin nochmals alles durchgesehen und festgestellt, dass die MOC-Einstellungen nicht mehr vorhanden waren. Somit hat er also beim Umbenennen eines Slots bzw. beim erstellen eines neuen Slots die Veränderungen einfach nicht mehr in die moc_Window1.cpp geschrieben.

Nachdem er dies nun wieder tut funktionierts auch wieder prächtig.

Also was lernt man daraus? - Kaum macht man's richtig, schon funktionierts ^^

Dennoch vielen Dank für die Hilfe :-)

Verfasst: 25. September 2007 13:29
von macman
Hab mich nicht getraut das zu schreiben, dachte das passiert nur mir :-) Ein bisschen mache ich aber auch VS verantwortlich. Das scheint manchmal Einstellungen zu vergessen.

Verfasst: 25. September 2007 18:14
von DarkWotan
Was mich dennoch ein wenig irritiert ist:

Code: Alles auswählen

MainWindow::void GPSSlot() 
{ 
... // Hier steht natürlich etwas mehr 
}
Hast du es wirklich so da hingeschrieben?
Ich denke nicht, dass der Compiler einen eigens innerhalb des Namensraums MainWindow definierten Datentyp 'void' durchgehen lässt.

MfG, Cedric