AW: Slots in derived classes
Micko Roland
Roland.Micko at icn.siemens.de
Mon Dec 13 07:49:50 GMT 1999
Hi,
you have commented out Q_OBJECT. Uncomment it and the code should work.
Roland Micko
ICN CA MR EG 2
SIEMENS AG
Hofmannstr. 51
81359 München
Tel.: +4989/722-21632
Fax.: +4989/722-47420
mailto:roland.micko at icn.siemens.de
> -----Ursprüngliche Nachricht-----
> Von: Thomas Nesges [SMTP:ThomasNesges at TNT-Computer.de]
> Gesendet am: Sonntag, 12. Dezember 1999 15:58
> An: kdevelop at barney.cs.uni-potsdam.de
> Betreff: Slots in derived classes
>
> Hi,
>
> I wanted to add a slot CurTime() to a QLabel which displays the current
> datetime, so I created a new class DateTimeLabel, derived from QLabel.
> When I start the small application I get the following errormessage:
>
> QObject::connect: No such slot QLabel::CurTime()
>
> Here's my code:
>
> // Header of DateTimeLabel
>
> #include <qlabel.h>
> #include <qdatetime.h>
>
> class DateTimeLabel : public QLabel {
> // Q_OBJECT
> public:
> DateTimeLabel();
> ~DateTimeLabel();
> public slots:
> void CurTime();
> public:
> QDateTime m_CurTime;
> };
>
>
> // Code of DateTimeLabel
>
> #include "datetimelabel.h"
>
> DateTimeLabel::DateTimeLabel()
> {
> CurTime();
> }
>
> DateTimeLabel::~DateTimeLabel()
> {
> }
>
> // Here's the slots implementation
> void DateTimeLabel::CurTime()
> {
> m_CurTime = QDateTime::currentDateTime();
> this->setText(m_CurTime.toString());
> }
>
>
> // main
>
> #include <qapp.h>
> #include <qtimer.h>
> #include <qlabel.h>
> #include <datetimelabel.h>
>
>
> int main(int argc, char *argv[])
> {
> QApplication app(argc, argv);
>
> DateTimeLabel *Label = new DateTimeLabel();
> Label->setGeometry(100,100,200,20);
> app.setMainWidget(Label);
>
> QTimer *timer = new QTimer();
> timer->start( 1000, FALSE );
>
> // Here I try to connect timeout() to CurTime()
> QObject::connect( timer, SIGNAL(timeout()),
> Label, SLOT(CurTime()) );
> Label->show();
>
> return app.exec();
> }
>
>
> Ca somebody point me to what I have missunderstood?
> Qt documentation says, that every class that uses slots has to 'mention'
> Q_OBEJCT in it's definition. If I try to insert it (uncomment it), I get
> the followings:
>
> /opt/kde/lib/libkdeui.so: warning: multiple common of `QArrayT<char>
> type_info node'
> datetimelabel.o: warning: previous common is here
> /opt/kde/lib/libkdecore.so: warning: multiple common of `QArrayT<char>
> type_info node'
> datetimelabel.o: warning: previous common is here
> /usr/lib/libqt.so: warning: multiple common of `QArrayT<char> type_info
> node'
> datetimelabel.o: warning: previous common is here
> datetimelabel.o: In function `QArrayT<char> type_info function':
> /usr/lib/qt/include/qarray.h(.text+0x19): undefined reference to
> `DateTimeLabel::QPaintDevice virtual table'
> /usr/lib/qt/include/qarray.h(.text+0x20): undefined reference to
> `DateTimeLabel virtual table'
> datetimelabel.o: In function `DateTimeLabel::~DateTimeLabel(void)':
> /home/thomas/KDevelop/qtclock/qtclock/datetimelabel.cpp:26: undefined
> reference to `DateTimeLabel::QPaintDevice virtual table'
> /home/thomas/KDevelop/qtclock/qtclock/datetimelabel.cpp:26: undefined
> reference to `DateTimeLabel virtual table'
> collect2: ld returned 1 exit status
> make: *** [qtclock] Error 1
> *** Fehler ***
>
> What trys KDevelop to tell me?
>
> TIA Thomas
> --
> --==[ www.tnt-computer.de ]==--
More information about the KDevelop
mailing list