001
16.01.2005, 19:54 Uhr
typecast
aka loddab (Operator)
|
Ok. Du hast mehrere Fehler gemacht:
1.) Eine Klassendeklaration musst du mit einem ; abschliessen. Sonst denkt der Compiler, dass du eine Variable der Klasse deklarieren wolltest.
2.) Slots sind immer void. Das hast du zwar richtig gemacht, aber du gibst in dem Slot mit return *this etwas zurueck. Das ist falsch.
3.) connect( button, SIGNAL(clicked()), *this, Errechne() ); Hier stecken 2 Fehler drin. Erstens brauchst du this und nicht *this, da ein Zeiger erwartet wird. Dann kannst du nicht einfach Errechne() uebergeben. Du musst kennzeichnen, dass das ein SLOT ist. Der korrekte Aufruf ist:
connect( button, SIGNAL(clicked()), this, SLOT(Errechne()) );
4.) Eigene Klassen solltest du immer in getrennten Dateien anlegen. Sonst kann der moc-Prekompiler dureinander kommen.
5.) Du solltest das Widget auch anzeigen lasse. Standardmaessig sind die Widgets unsichtbar. Deswegen muss noch die Anweisung diag.show(); in deine main-funktion.
Ich habe das mal fuer dich ein wenig umformatiert:
C++: |
// test.h #ifndef _MYDIALOG_H_ #define _MYDIALOG_H_
#include <qlineedit.h> #include <qstring.h> #include <qlabel.h> #include <qvbox.h> #include <qhbox.h> #include <qpushbutton.h>
class MyDialog : public QHBox { Q_OBJECT
private: QVBox* vbox1; QVBox* vbox2; QLabel* label1; QLabel* label2; QPushButton* button; QLineEdit* alter; QLineEdit* fhmax;
private slots: void Errechne();
public: MyDialog( QWidget *parent=0, const char *name=0 ); ~MyDialog(); };
#endif
|
C++: |
#include "test.h"
void MyDialog::Errechne() { QString sAlter( alter->text() ); QString sFHmax; int iFHmax; bool ok;
int iAlter = sAlter.toInt( &ok ); if(!ok) { fhmax->setText( "Ung?ltige Eingabe!" ); return; }
iFHmax = 226 - iAlter; sFHmax.setNum( iFHmax ); fhmax->setText( sFHmax );
//return *this; }
MyDialog::MyDialog( QWidget *parent, const char *name ) : QHBox( parent, name ) { vbox1 = new QVBox( this, "vbox1" ); vbox2 = new QVBox( this, "vbox2" ); label1 = new QLabel( "Lebensalter: ", vbox1, "label1" ); alter = new QLineEdit( vbox1, "alter" ); label2 = new QLabel( "FHmax: ", vbox2, "label2" ); fhmax = new QLineEdit( vbox2, "fhmax" ); button = new QPushButton( "Errechne!", this, "button" );
fhmax->setEdited( false );
connect( button, SIGNAL(clicked()), this, SLOT(Errechne()) ); }
MyDialog::~MyDialog() { delete vbox1; delete vbox2; delete label1; delete label2; delete alter; delete fhmax; delete button; }
|
C++: |
// main.cpp #include <qapplication.h> #include "test.h"
int main( int argc, char **argv ) { QApplication app(argc,argv); MyDialog diag;
app.setMainWidget( &diag ); diag.show(); return app.exec(); }
|
-- All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925) |