PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Qt


smog_at
14.09.2003, 16:33
Hey @all,

So, ich habe mir nun das Buch "Programming with Qt" vom O'Reilly Verlag bestellt, nun wollte ich halt mein bisher gelerntes in die Praxis umsetzen, und ein kleines Programm erstellen, jedoch scheitert es sogar bei meinem ersten Programm, aber hier mal der Quelltext:


#include <qapplication.h>
#include <qpushbutton.h>
#include <qwidget.h>

class MyApplication : public QWidget {
public:
MyApplication();
~MyApplication();
};

MyApplication::MyApplication() {
QPushButton *buttonPush = new QPushButton("Push", this);
buttonPush->setGeometry(10,50,100,30);

QPushButton *buttonExit = new QPushButton("Exit Program", this);
buttonExit->setGeometry(10,100,100,30);

QObject::connect(buttonExit, SIGNAL(clicked()), this, SLOT(quit()));
}

MyApplication::~MyApplication() {
}

int main(int argc, char*argv[]) {
QApplication myapp(argc, argv);

MyApplication *mywidget = new MyApplication();
mywidget->setGeometry(400,300,200,200);

myapp.setMainWidget(mywidget);
mywidget->show();
return myapp.exec();
}


Könnt Ihr mir etwas helfen und sagen, warum ich wenn ich auf den Exit-Button draufklicke sich nichts tut?

Wenn ich das Programm starte erscheint folgende Meldung:
QObject::connect: No such signal QWidget::clicked()
QObject::connect: (sender name: 'unnamed')
QObject::connect: (receiver name: 'unnamed')

Vielen Dank im Voraus
MfG Flex


Androctonus
14.09.2003, 18:28
hast du auch alle notwendigen .libs mit dazugelinkt?

butterkeks
14.09.2003, 19:58
QObject::connect(buttonExit, SIGNAL(clicked()), this, SLOT(quit()));


ich denk', du musst vor "buttonExit" einn "&" schreiben, weil du ja referenzieren sollst, bin mir aber nich' sicher...

Patrik Graf
22.09.2003, 12:57
Da der PushButton eine Klasse ist, muss er höchst warscheinlich nicht extra referenzieren, da die Variable buttonExit schon eine Refferenz ist.

Musst du vllt anstatt "SLOT(quit())" einen funktionszeiger auf eine Ereignisbehandlungsroutine übergeben? Probier das mal...

butterkeks
22.09.2003, 18:02
Hab's gelöst (seltsam, geht aber; Code im Anhang):
Du musst myapp als globalen Pointer des Typs QApplication deklarieren. Im Prog selbst erstellste deine Instanz mit dem "new" Operator und wandelst alle "." in "->" um, wo du auf "myapp" zu greifst.
In deinem connect() änderste dann noch "this" in "myapp" und fertig...

Du kannst auch wie gewohnt arbeiten und der Klasse 'ne member-var geben, die 'ne Referenz auf myapp speichert, damit könnteste's mehr OOP-Gerecht gestalten.

Ich bin relativ neu bei QT, demnach könnt's auch 'ne bessere Lösung geben...

Mich würd' trotzdem interessieren, warum das nich' funzt, obwohl es in einem O'Reilly Buch steht?!?