Seite 1 von 1

[gelöst] Signal-connect mit mehreren Klassen

Verfasst: 23. August 2006 23:59
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?

Verfasst: 24. August 2006 09:36
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.

Verfasst: 24. August 2006 10:47
von reani
Hallo,

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

mfg
reani