[gelöst] Connect funktioniert nicht!

Alles rund um die Programmierung mit Qt
Antworten
pauli8585
Beiträge: 4
Registriert: 18. Juni 2005 14:30
Kontaktdaten:

[gelöst] Connect funktioniert nicht!

Beitrag von pauli8585 »

Hi!

Hoffentlich könnt ihr mir helfen. Ich programmiere erst seit ein paar Tagen mit qt (unter Linux). Beim folgenden Programm funktioniert die connect Methode nicht. Bitte schaut nicht auf den Programmierstil. :-)

Wo ist der Fehler?

mfg
Pauli

#include <qt3/qapplication.h>
#include <qt3/qpushbutton.h>
#include <qt3/qlineedit.h>
#include <qt3/qlabel.h>

class Form : public QWidget
{
private:
QLabel *Label;
public:
Form( QWidget *parent=0, const char *name=0 );
public slots:
void changeText();
};

Form::Form( QWidget *parent, const char*name ): QWidget( parent, name)
{
setMinimumSize(200, 120);
setMaximumSize(200, 120);

QPushButton *bttn = new QPushButton( "Klick", this, "Klick" );
bttn->setGeometry( 62, 20, 75, 30 );

Label = new QLabel( this );
Label->setText("TEST");
Label->setGeometry (0,0,60,20);
Label->setFrameStyle( QFrame::Panel | QFrame::Sunken );

QLineEdit *textBox = new QLineEdit("TextBox", this, "textBox" );
textBox->setGeometry(50,50,100,50);

connect( bttn, SIGNAL(clicked()), this, SLOT(changeText()) );
}

void Form::changeText()
{
Label->setText("XNJKLNK");
}

int main( int argc, char **argv)
{
QApplication a( argc, argv );
Form w;
a.setMainWidget( &w );
w.show();
return a.exec();
}
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Ja, und was genau funktioniert da nicht?

Hast du Q_OBJECT in der Definition gesetzt? Wird ein moc File erstellt und einkompiliert? Ist changeText als Slot definiert?

Ok, ich habe deine Definition übersehen, dachte, das ist eine weitere Datei, also du musst Q_OBJECT setzten, dann wird das auch gehen.

...
class Form

Q_OBJECT

public: ...
pauli8585
Beiträge: 4
Registriert: 18. Juni 2005 14:30
Kontaktdaten:

Beitrag von pauli8585 »

Danke für die Antwort!

Wenn ich Q_OBJECT einfüge bekomme ich folgende Fehlermeldung:

./compile.sh 1
1.o(.text+0x2d): In function `Form::Form[not-in-charge](QWidget*, char const*)':
: undefined reference to `vtable for Form'
1.o(.text+0x39): In function `Form::Form[not-in-charge](QWidget*, char const*)':
: undefined reference to `vtable for Form'
1.o(.text+0x3ab): In function `Form::Form[in-charge](QWidget*, char const*)':
: undefined reference to `vtable for Form'
1.o(.text+0x3b7): In function `Form::Form[in-charge](QWidget*, char const*)':
: undefined reference to `vtable for Form'
1.o(.gnu.linkonce.t._ZN4FormD1Ev+0xb): In function `Form::~Form [in-charge]()':
: undefined reference to `vtable for Form'
1.o(.gnu.linkonce.t._ZN4FormD1Ev+0x17): more undefined references to `vtable for Form' follow
collect2: ld returned 1 exit status

mfg
Pauli
Grüsse Paul
taki
Beiträge: 30
Registriert: 8. Februar 2005 15:52
Wohnort: Berlin

Beitrag von taki »

Du musst noch die .moc Datei einbinden.

In der letzten Zeile der Datei, die die Implementation enthält:

Code: Alles auswählen

#include "deinedatei.moc"
Allerdings muss das Buildsystem auch wissen, dass eine .moc Datei erzeugt und eingebunden werden muss. Wenn Du kdevelop verwendest, dann hilft das Makefile.am Howto weiter.

Wenn nicht, muss jemand anders weiter helfen, da kenn ich mich nicht aus. Vermute, dass qmake das auch selbst berücksichtigen kann, wenn die .pro Datei stimmt.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Wenn du das qmake (*.pro) System von Qt nimmst macht er das normalerweise alles automatisch. Sollt das schon der Fall gewesen sein, und es ging trotzdem nicht, dann hast du vergessen erneut qmake auszuführen um ein neues Makefile zu erzeugen. qmake kann vieles, aber eben nicht alles, denn es kann ja nicht wissen, das du nun ein neues Q_OBJECT eingefügt hast. Denn das durchsucht er nämlich vor dem erstellen von Make Dateien.
pauli8585
Beiträge: 4
Registriert: 18. Juni 2005 14:30
Kontaktdaten:

Beitrag von pauli8585 »

1.pro Datei:

SOURCES = 1.cpp
CONFIG += qt warn_on release

--> qmake -o Makefile 1.pro

Habe jetzt diese 1.pro Datei erstellt,
mit qmake ein Makefile gemacht
und anschließend mit make kompiliert.

Leider erhalte ich noch immer die gleiche
Fehlermeldung.

mfg
Pauli
Grüsse Paul
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

ist die .moc eingebunden?
pauli8585
Beiträge: 4
Registriert: 18. Juni 2005 14:30
Kontaktdaten:

Beitrag von pauli8585 »

Hi!

Vielen Dank für Eure Antworten!!!

@lepsai: Danke, ich habe jetzt noch die .moc Datei mit einbezogen!

mfg
Pauli
Grüsse Paul
Antworten