[gelöst] Signal-connect mit mehreren Klassen

Alles rund um die Programmierung mit Qt
Antworten
reani
Beiträge: 24
Registriert: 23. August 2006 23:28

[gelöst] Signal-connect mit mehreren Klassen

Beitrag von reani »

Hallo,

Wie schon viele vor mir bin ich auch ein Newbie. Hab das Forum nach meinem Problem durchsuchen, aber nie wirklich das gefunden, das ich brauche (oder nicht verstanden).

Bei meinem Problem geht es um Signale zwischen verschiedenen Klassen.

Code: Alles auswählen

Also meine "Startklasse" wo ich die eine Instanz der QApplication-Klasse erstelle.

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    
    Main *w = new Main;
    w->showMaximized();
    w->show();
    return app.exec();
}
Dann die Klasse Main, in der ich eine weiteres Objekt der Klasse GUI instanziere:

Code: Alles auswählen

class Main: public QMainWindow
{
    Q_OBJECT

public:
	//constructor
    Main();

private:
	//objects
	QWidget *mainWidget;

};

Main::Main() {
	GUI *gui = new GUI;
	mainWidget = gui->getWidget();
	setCentralWidget(mainWidget);
}
In dieser Klasse GUI hab ich jetzt einen Button mit dem ich die ganze Anwendung schließen möchte.

Code: Alles auswählen

class GUI : public QWidget
{
    Q_OBJECT

public:
    GUI();
	QWidget *getWidget();

private:
	QWidget *myWidget;
	QPushButton *quitButton;
};

GUI::GUI()
{
    QWidget *myWidget = new QWidget;
    quitButton = new QPushButton(tr("Quit"), myWidget);
    connect(quitButton, SIGNAL(clicked()), this , SLOT(close()));
}

QWidget *MenuGUI::getWidget() {
	return myWidget;
}
Ich zitiere aus einem Buch:
The global variable qApp is declared in qapplicaltion.h and it is guaranteed to hold a pointer to the only object of the class qapplication. You can always use it to refer to your application object.
Daraufhin dachte ich mir, dass ich im "connect" des Buttons nur &qApp angeben muss und mein Programm wird beendet, weil der Pointer ja global ist.
->Machts aber nicht, weil qApp in der Klasse nicht kennt (first use this function)

Wenn ich "this" beim connect einfüge, dann tut sich gar nix -> schätze mal, weil sich das this auf das aktuelle Widget bezieht.

Was muss ich da beim connect vom quitButton angeben? oder muss ich da was mit parents basteln?
Zuletzt geändert von reani am 24. August 2006 10:48, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

qApp ist ein Pointer, also qApp und nicht &qApp. Ausserdem ist diese in qapplication.h definiert - hast Du diesen Header includiert?
Siehe z.B. auch das Qt-Tutorial - dort wird diese Variable auch verwendet.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
reani
Beiträge: 24
Registriert: 23. August 2006 23:28

Beitrag von reani »

Hallo,

danke für die Antwort! Hab tatsächlich nur vergessen die <QApplication> einzubinden. :oops:

mfg
reani
Antworten