SIGNAL(), SLOT() - warum gleiche Parameter? (Anfängerfrage)

Verschiedenes zu Qt
Antworten
valenterry
Beiträge: 4
Registriert: 21. Februar 2007 17:29

SIGNAL(), SLOT() - warum gleiche Parameter? (Anfängerfrage)

Beitrag von valenterry »

Hallo erstmal an alle, bin ganz neu hier.
Ich hab mir das Buch "C++ GUI Programmierung mit QT4" gekauft.
In diesem gibt es folgendes Codebeispiel:

Code: Alles auswählen

#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QPushButton *button = new QPushButton("Quit");
    QObject::connect(button, SIGNAL(clicked()),
                     &app, SLOT(quit()));
    button->show();
    return app.exec();
}
Ich hab das ein bisschen modifiziert und folgendes ist dabei rausgekommen:

Code: Alles auswählen

#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
	
	QWidget *mainWindow = new QWidget;
	
	mainwindow->setWindowTitle("erster Titel");
	
    QPushButton *quitButton = new QPushButton("Beenden");
	QPushButton *titelButton = new QPushButton("Titel aendern");
	
    QObject::connect(quitButton, SIGNAL(clicked()),
                     &app, SLOT(quit()));
    QObject::connect(titelButton, SIGNAL(clicked()),
                     mainwindow, SLOT(setWindowTitle("neuer Titel")));

	mainwindow->show();
	
    return app.exec();
}
Wenn ich das nun kompiliere, ausführe und auf den titelButton klicke, passiert nix. Eigentlich sollte das Fenster nun die Überschrift "neuer Titel" haben.
Ich habe auch andere Methoden ausprobiert, z.B. die Fenstergröße zu ändern, oder den Text des quitButtons zu ändern, aber nichts hat funktioniert.
Dann hab ich in folgendem Tutorial gelesen, dass die SIGNAL Methode und die SLOT Methode jeweils den gleichen Parameter haben müssen.
Stimmt das und funktioniert mein Beispiel deshalb nicht, oder liegt es (auch noch) an etwas anderem?
Falls es daran liegt, was kann ich tun, damit es trotzdem funktioniert, ohne große Umwege gehen zu müssen?
Achja, falls ihr noch mehr Infos braucht, lasst es mich wissen.
Bitte helft einem verzweifelten Neuling. >.<

Greets, valenterry.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Doku schon gelesen? Signals and Slots
valenterry
Beiträge: 4
Registriert: 21. Februar 2007 17:29

Beitrag von valenterry »

Ja hab ich schon gelesen.
Qt's signals and slots mechanism ensures that if you connect a signal to a slot, the slot will be called with the signal's parameters at the right time. Signals and slots can take any number of arguments of any type. They are completely type safe.
Meintest du speziell diesen Abschnitt?
Das hilft mir aber auch nicht wirklich.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Nein diesen:
The signature of a signal must match the signature of the receiving slot. (In fact a slot may have a shorter signature than the signal it receives because it can ignore extra arguments.)
valenterry
Beiträge: 4
Registriert: 21. Februar 2007 17:29

Beitrag von valenterry »

Also war meine Vermutung ja doch richtig und ich kann nicht "clicked()" und "setWindowTitle()" benutzen, weil "clicked()" keine Parameter hat aber "setWindowTitle()" schon. Stimmt das jetzt so?
Und meine Frage dazu war nun, ob ich den Namen des Fenster nun elegant ändern kann (und wenn ja, wie es geht), oder ob ich mir dafür eine Funktion schreiben muss.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ja, du mußt dir dazu eine eigene Funktion schreiben (bzw. eigentlich einen SLOT). Da man QMainWindow aber meist in einer selbst abgeleiteten Klasse verwendet fallen die 2 Zeilen Code auch nicht auf. Es würde zwar in deiner Test-Main-Klasse auch gehen aber Aufwand dafür steht in keinem Verhältnis zum Ergebnis...
valenterry
Beiträge: 4
Registriert: 21. Februar 2007 17:29

Beitrag von valenterry »

Gut, danke für deine Hilfe! :D
Antworten