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