PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QTimer



brumm
07-03-2002, 16:31
Hallo,
auf Rat von anda_skoa bin ich hierher umgezogen und ich will ihn auch gleich wieder belästigen.

Hier nochmal mein Timer in anderer Form. Aber wie ich auch drehe ich krieg das Ding nicht zum laufen. Die Trolltech tutorials preisen ihre GUI und Helmut Herold in seinem grünen Schmöcker ist nicht besser. Nur das Zeug muß doch auch ohne grafisches Anhängsel gehen und da find ich nichts was einem Qt greenhorn, der auch die dahintersteckende Philosophie noch nicht kennt, weiterhilft. Genug gejammert!

#include <qapplication.h>
#include <iostream.h>
#include <qobject.h>
#include <qtimer.h>

class B : public QObject
{
Q_OBJECT

QTimer *vTimer;

public:
B(QObject *parent=0, const char *name=0);
~B() {};

void onTimer();

void startTimer() {vTimer->start(3000, FALSE);}
void stopTimer() {vTimer->stop();}

public slots:
void offTimer();
};

B::B(QObject *parent=0, const char *name=0) : QTimer(parent, name) //***
{
vTimer = new QTimer(this); //(0)
connect(vTimer, SIGNAL(timeout()),
this, SLOT(offTimer()));
}

void B::onTimer()
{
startTimer();
cout << "Timer started" << endl;
}

void B::offTimer()
{
stopTimer();
cout << "Timer stopped" << endl;
}

int main(int argc, char **argv)
{
QApplication a(argc, argv);

B b;
b.onTimer();
return a.exec();
}

***: type `QTimer' is not an immediate basetype for `B' meint der g++ jetzt und dann mag er nicht mehr...

Also wer ist so nett und schiebt mich da mal an, bitte!

By

anda_skoa
07-03-2002, 18:34
Original geschrieben von brumm
Hallo,
auf Rat von anda_skoa bin ich hierher umgezogen und ich will ihn auch gleich wieder belästigen.


Da fehlt ein smiley :)



class B : public QObject


B::B(QObject *parent=0, const char *name=0) : QTimer(parent, name) //***


Fällt dir was auf?

Wie wäre es mit


B::B(QObject* parent=0, const char* name=0) : QObject(parent, name)

;)

Sonst sieht das schon gut aus.

Ciao,
_

P.S. Ansich bin ich ein Salzburger, ich studier nur in Graz :)
Tut der "Internationalität" aber keine Abbruch :p

brumm
08-03-2002, 12:49
hi anda_skoa

Kam was anderes dazwischen, aber da bin ich noch mal.
Also dein tip im Konstruktor war von mir ein Fehler im posting, da stand zuerst QObject, das ging nicht, dann hab ich QTimer hingeschrieben, das konnte natürlich nicht gehen aber ich hab's gepostet. Nun renn ich mit'n Kopf aber immer noch gegen die Wand. Der Linker meint:

//Linker Error-> In function `B::B(QObject *, char const *)':
undefined reference to `B virtual table'

und das ist de Konstruktoraufruf. Ich kapier nicht was der will!

//filename: vtest.cpp

#include <qapplication.h>
#include <iostream.h>
#include <qobject.h>
#include <qtimer.h>

class B : public QObject
{
Q_OBJECT

QTimer *vTimer;

public:
B(QObject *parent=0, const char *name=0);
~B() {};

void onTimer();

void startTimer() {vTimer->start(3000, FALSE);};
void stopTimer() {vTimer->stop();};

public slots:
void offTimer();
};

B::B(QObject *parent=0, const char *name=0) : //Linker Error->
QObject(parent, name)
{
vTimer = new QTimer(this);
QObject::connect(vTimer, SIGNAL(timeout()),
this, SLOT(offTimer()));
}

void B::onTimer()
{
startTimer();
cout << "Timer started" << endl;
}

void B::offTimer()
{
stopTimer();
cout << "Timer stopped" << endl;
}

int main(int argc, char **argv)
{
QApplication a(argc, argv);

B b;
b.onTimer();

return a.exec();
}

Sorry für die Hartnäckigkeit, aber ich komm hier allein nicht weiter.
Trotzdem schönes Wochenend

By brumm

anda_skoa
08-03-2002, 13:48
Das hört sich nach einem vergessenen moc Aufruf an.

Benutzt du KDevelop?
Oder machst du die Makefile per Hand?

Mit KDevelop mußt du die Makefiles neu generieren lassen. Einfach im Verzeichnis
#> touch Makefile.am
machen.
Sollte das nicht reichen, gibt in einem Der Menüpunkte so etwas wie "Alles neu erstellen"

Wenn du die Makefiles selbst schreibst, brauchst du eine Aufruf den moc (Meta Object Compiler) von Qt.

moc -o myfile.moc myfile.h

Diese moc file mußt du dann am Ende des cpp includen glaub ich.

Aber du solltest vielleicht tmake verwenden, wenn du keine autoconf/automake tamples verwenden kannst.

Ciao,
_

brumm
11-03-2002, 09:27
Moin anda_skoa

Also für dieses "filechen" benutze ich natürlich tmake und editiere ganz einfach mit nedit. Tut mir leid, das nicht gleich gesagt zu haben.
Hier das vt.pro file:

TEMPLATE = app # Application / lib Library
CONFIG = qt warn_on debug
HEADERS =
SOURCES = vtest.cpp
TARGET = vt
DESTDIR = .
MOC_DIR = .moc
OBJECTS_DIR = .obj

tmake vt.pro -o Makefile -> generiert mein Makefile. Die Kleinigkeiten zum austesten stehen auch alle in einem einzigen Verzeichnis.
Alles rund um tmake sollte gehen, das ist eigentlich incl. Pfaden und environment variablen x-fach erprobt.
Kann das vielleicht an Qt auch liegen? Hab denen das auch schon gepostet. Trolltech bietet aber keinen support weil die SuSE distribution natürlich "freeware" ist. Versteh ich auch.

By
brumm

anda_skoa
11-03-2002, 09:31
Ah.

Vielleicht braucht tmake einen Header, um das moc Target zu ereugen.
Probiermal, zumindest die Klasse mit dem Q_OBJECT macro in einem Headerfile zu deklarieren und in einem gleichnamigen cpp zu implementiren.

Ich hatte bsiher nur diese Fälle, wenn ich tmake benutzt habe, weil meist nur main.cpp ohne header ist.

Ciao,
_

brumm
11-03-2002, 11:17
Dear anda_skoa

Hätt ich nicht gedacht, das wars. Hab die Klassendeklaration wie von dir empfohlen in ein headerfile gepackt und schon lief's.
Ich hab das erst gar nicht probiert, weil ich früher die tutorials von Qt auch nur in einem *.cpp file hatte und die ließen sich problemlos übersetzen und linken.
Jedenfalls recht herzlichen dank für die Mühe und immer rasche Unterstützung. Hoffe auch mal helfen zu können.

K & K unterwürfigst
Helmfried alias brumm

anda_skoa
11-03-2002, 16:11
Original geschrieben von brumm
Dear anda_skoa

Hätt ich nicht gedacht, das wars. Hab die Klassendeklaration wie von dir empfohlen in ein headerfile gepackt und schon lief's.


Gut zu wissen!



Jedenfalls recht herzlichen dank für die Mühe und immer rasche Unterstützung. Hoffe auch mal helfen zu können.


Kein Ursache.
Aus diesem Grund les ich ja dieses Forum :)

Ciao,
_