Timer probleme !

Alles rund um die Programmierung mit Qt
grisuking
Beiträge: 10
Registriert: 6. Januar 2005 15:15

Timer probleme !

Beitrag von grisuking »

Hallo zusammen !
Ich habe schon wieder ein Problem , bei dem ich nicht weiterkomme :

Ich möchte ein Label in meinem Hauptfenster alle 5 Sekunden aktualisieren. Dann habe ich gelesen, dass man sowas mit einem Timer machen sollte ! Soweit so gut !

habe dann folgenden Code erstellt :

Code: Alles auswählen

class MyWidget : public QWidget
{    
public:
    MyWidget( QWidget *parent=0, const char *name=0 );
     
     void init(void);
     void timer(void);
     
 private slots:
     void work(void); 
     
};

void MyWidget::timer(void)
{
    QTimer *timer = new QTimer( this );
    connect( timer, SIGNAL(timeout()),  SLOT(work()) );
    timer->start( 5000, TRUE ); // 5 seconds single-shot timer
}

MyWidget::MyWidget( QWidget *parent, const char *name )
        : QWidget( parent, name )
{    
    QPushButton *quit = new QPushButton( "Quit", this, "quit" );
    quit->setFont( QFont( "Times", 10, QFont::Bold ) );
    quit->resize( 75, 30 );
    connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );
    this->timer();
}   


void MyWidget::work(void)
{
    // hier -> tu was 
}

int main( int argc, char **argv )
{
    QApplication a( argc, argv );
    
    QString bild = "hintergrund.png";
    QPixmap *background = new QPixmap(bild,0);
    
    MyWidget w;
    w.setGeometry( 1280, 1024, 0, 0 );
    w.setPaletteBackgroundPixmap ( *background );
    w.init();
    w.showFullScreen();
    a.setMainWidget( &w );
   
    return a.exec();
}
Wenn ich das nun compiliere gibt es keiinerlei Fehlermeldungen.
wenn ich denn das progrämmchen starte sagt er mir folgendes :

QObject::connect: No such slot QWidget::work()
QObject::connect: (sender name: 'unnamed')
QObject::connect: (receiver name: 'unnamed')


Was mache ich denn wieder falsch ? :cry:

Bin wie immer für denkastöße sehr dankbar !

gruß
grisuking
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

///zeige bitte auch deine .h __>blödsinn
benutzte QT 3.2 nc auf w2k
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

lass das void in der .h weg

Code: Alles auswählen

void work();
als slot reicht

und nenen das mal public slots ich weiß gar nicht ob es private slots gibt :-)
gandalf
benutzte QT 3.2 nc auf w2k
grisuking
Beiträge: 10
Registriert: 6. Januar 2005 15:15

Beitrag von grisuking »

hallo gandalf

Hab ich gemacht, hat aber leider nichts geändert !

habe immernoch die ausgabe wäherrnd der Laufzeit :

QObject::connect: No such slot QWidget::work()
QObject::connect: (sender name: 'unnamed')
QObject::connect: (receiver name: 'unnamed')

*langsamverzwiefel*
Spring-Daniel
Beiträge: 40
Registriert: 4. Oktober 2004 16:26

Beitrag von Spring-Daniel »

Mh, hast du nicht das Q_OBJECT vergessen?
Andererseits wuerde es dann ja aber auch garnicht ordentlich compilieren...

Code: Alles auswählen

class MyWidget : public QWidget 
{    
Q_OBJECT
public: 
grisuking
Beiträge: 10
Registriert: 6. Januar 2005 15:15

Beitrag von grisuking »

Spring-Daniel hat geschrieben:Mh, hast du nicht das Q_OBJECT vergessen?
Andererseits wuerde es dann ja aber auch garnicht ordentlich compilieren...

Code: Alles auswählen

class MyWidget : public QWidget 
{    
Q_OBJECT
public: 
Wenn ich das Q_OBJECT einfüge ( mit #include <qobject.h> )
bekomme ich folgende Fehlermeldung vom Compiler :

main.o(.text+0xf1b): In function `MyWidget::MyWidget[in-charge](QWidget*, char const*)':
: undefined reference to `vtable for MyWidget'
main.o(.text+0xf26): In function `MyWidget::MyWidget[in-charge](QWidget*, char const*)':
: undefined reference to `vtable for MyWidget'
main.o(.text+0x121e): In function `main':
: undefined reference to `vtable for MyWidget'
main.o(.text+0x122d): In function `main':
: undefined reference to `vtable for MyWidget'
main.o(.text+0x12d6): In function `main':
: undefined reference to `vtable for MyWidget'
main.o(.text+0x12e5): more undefined references to `vtable for MyWidget' follow
collect2: ld returned 1 exit status
make: *** [neu] Fehler 1

daher habe ich das weggelassen und er compiliert ohne zu meckern !
Spring-Daniel
Beiträge: 40
Registriert: 4. Oktober 2004 16:26

Beitrag von Spring-Daniel »

Das sieht doch mal wieder danach aus als ob jemand den moc vergessen haette?

Wenn du qmake verwendest, hast du womoeglich deine Klassen-Definition mit in der .cpp - File, und der moc generiet deswegen keinen Meta-Object-Code. Am besten also dann, die Definiton in eine extra Header-Datei, und qmake in der .pro-File diese Headerdatei mitteilen. (

( Hab schon lang nicht mehr mit qmake hantiert, korrigiert oder ergaenzt mich also ruhig. )
grisuking
Beiträge: 10
Registriert: 6. Januar 2005 15:15

Beitrag von grisuking »

Spring-Daniel hat geschrieben:Das sieht doch mal wieder danach aus als ob jemand den moc vergessen haette?

Am besten also dann, die Definiton in eine extra Header-Datei, und qmake in der .pro-File diese Headerdatei mitteilen. (
Ok habe ich gemacht und er compiliert jetzt auch anständig mit Q_OBJECT , aber das oben beschriebene Problem bleibt :

QObject::connect: No such slot QWidget::work()
QObject::connect: (sender name: 'unnamed')
QObject::connect: (receiver name: 'unnamed')


hast Du dazu vielleicht auch noch eine tolle IDEE ??
habe mal meiinen gesammten Code als .txt angehängt !
vielleicht hilft euch das ja weiter !

gruß
grisuking
Dateianhänge
main.h+cpp.txt.tar.gz
(1.76 KiB) 318-mal heruntergeladen
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

änder mal das connect, der such ne Funktion in QWidget

Code: Alles auswählen


    QTimer *timer = new QTimer( this );

    connect( timer, SIGNAL(timeout()), this,  SLOT(work()) );


    timer->start( 5000, TRUE ); // 5 seconds single-shot timer

benutzte QT 3.2 nc auf w2k
grisuking
Beiträge: 10
Registriert: 6. Januar 2005 15:15

Beitrag von grisuking »

gandalf hat geschrieben:änder mal das connect, der such ne Funktion in QWidget
Hab ich auch schon gemacht und hat leider nichts gebracht !

*schadeschade*

gleiche Fehlermeldung!
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

mmh, vieleicht liegt es daran das du alles in einer main.cpp und main.h hast, ich trenne sowas grundsätzlich, und würde aus Hauptfenster ne eigene .cpp und .h machen, mag sein das qt sonst ein Problem damit hat

gandalf
benutzte QT 3.2 nc auf w2k
Spring-Daniel
Beiträge: 40
Registriert: 4. Oktober 2004 16:26

Beitrag von Spring-Daniel »

Dann hast du irgendwas falsch gemacht. Bei mir funktioniert das jetzt naemlich praechtig.

Erstelle Verzeichnis.
Erstelle main.h mit Klassen-Definition.
Erstelle main.cpp mit Klassen-Deklaration & main()
qmake -project
qmake
make

Here we go. (:
Hab dir das ganze auch nochmal angehaengt, so, wie's bei mir funktioniert.

Gruesse,
Daniel
grisuking hat geschrieben:
Spring-Daniel hat geschrieben:Das sieht doch mal wieder danach aus als ob jemand den moc vergessen haette?

Am besten also dann, die Definiton in eine extra Header-Datei, und qmake in der .pro-File diese Headerdatei mitteilen. (
Ok habe ich gemacht und er compiliert jetzt auch anständig mit Q_OBJECT , aber das oben beschriebene Problem bleibt :

QObject::connect: No such slot QWidget::work()
QObject::connect: (sender name: 'unnamed')
QObject::connect: (receiver name: 'unnamed')


hast Du dazu vielleicht auch noch eine tolle IDEE ??
habe mal meiinen gesammten Code als .txt angehängt !
vielleicht hilft euch das ja weiter !

gruß
grisuking
Edit: Huch, warum sind denn bz2 - Files verboten?
PS: Wer hilft mir jetzt mit Oracle? (:
Dateianhänge
bla.tar.gz
(20.8 KiB) 256-mal heruntergeladen
Zuletzt geändert von Spring-Daniel am 10. Januar 2005 15:23, insgesamt 1-mal geändert.
grisuking
Beiträge: 10
Registriert: 6. Januar 2005 15:15

Beitrag von grisuking »

gandalf hat geschrieben:mmh, vieleicht liegt es daran das du alles in einer main.cpp und main.h hast, ich trenne sowas grundsätzlich, und würde aus Hauptfenster ne eigene .cpp und .h machen, mag sein das qt sonst ein Problem damit hat

gandalf
Es tut mir wirklich leid das sagen zu müssen, aber dass war es auch nicht !
Ich habe gerade mal ein Beispiel von QT genommen und compiliert ( aclock ) und siehe da, die haben auch nichts anderes gemacht als ich und da funktioniert alles wunderbar ! ES IST DOCH ECHT ZUM KOTZ....!!!

:cry: :cry: :cry:
grisuking
Beiträge: 10
Registriert: 6. Januar 2005 15:15

Beitrag von grisuking »

Spring-Daniel hat geschrieben:Dann hast du irgendwas falsch gemacht. Bei mir funktioniert das jetzt naemlich praechtig.
Das is mir schon klar ! Aber wo liegt meiiin Fehler ?
Spring-Daniel hat geschrieben: Erstelle Verzeichnis.
Erstelle main.h mit Klassen-Definition.
Erstelle main.cpp mit Klassen-Deklaration & main()
qmake -project
qmake
make

habe ich genau so gemacht !
Spring-Daniel hat geschrieben: Hab dir das ganze auch nochmal angehaengt, so, wie's bei mir funktioniert.
wo denn ??

gruß
grisuking
grisuking
Beiträge: 10
Registriert: 6. Januar 2005 15:15

Beitrag von grisuking »

Ich werd irre !
Diese Version funzt einwandfrei !
Werde der Sache morgen nochmal auf den Grund gehen ! dass kanns ja wohl echt nicht sein ! oder hast Du da noch irgendwas geändert, was ich jetzt auf die Schnelle nicht gesehen habe ?

EGAL ! Ich sag jedenfalls erstmal recht herzlichen Dank!


Gruß
grisuking
Antworten