title: Undefined reference to vtable... Q_OBJECT macro
body: <p>When I uncomment the Q_OBJECT macro that I need for signal-slot I get a undefined reference to vtable for MyApp error, but without the macro it compiles perfectly but I can't use signals and slots without it. I think I may be doing something stupid wrong, but please try helping because I realy can't find the problem. O and I know my code is untidy and am working on it.</p>
  
  <p>myapp.h:</p>
  
  <pre><code>#ifndef MYAPP_H
  #define MYAPP_H
  
  #include &lt;QApplication&gt;
  #include &lt;QEvent&gt;
  #include &lt;QObject&gt;
  #include &lt;QDebug&gt;
  
  class MyApp : public QApplication
  {
  
  public:
      MyApp( int argc, char** argv );
  
  protected:
      bool eventFilter(QObject *object, QEvent *event);
  
  signals:
      void focusG();
      void focusL();
  };
  
  #endif // MYAPP_H
  </code></pre>
  
  <p>myapp.cpp:</p>
  
  <pre><code>#include "myapp.h"
  
  MyApp::MyApp(int argc, char **argv): QApplication(argc, argv)
  {
      installEventFilter(this);
  }
  
  bool MyApp::eventFilter(QObject *object, QEvent *event)
  {
      if (event-&gt;type() == QEvent::ApplicationDeactivate)
      {
          qDebug() &lt;&lt; "Focus lost";
          //focusL();
      }
      if (event-&gt;type() == QEvent::ApplicationActivate)
      {
          qDebug() &lt;&lt; "Focus gained";
          //focusG();
      }
  
      return false;
  }
  </code></pre>
  
  <p>main.cpp:</p>
  
  <pre><code>#include &lt;QtGui/QApplication&gt;
  #include "qmlapplicationviewer.h"
  #include &lt;QObject&gt;
  #include &lt;QGraphicsObject&gt;
  #include &lt;QTimer&gt;
  #include &lt;QVariant&gt;
  #include "timecontrol.h"
  #include "scorecontrol.h"
  #include "Retry.h"
  #include &lt;QEvent&gt;
  #include "myapp.h"
  
  int main(int argc, char *argv[])
  {
      //QApplication app(argc, argv);
      MyApp app(argc, argv);
  
      QmlApplicationViewer viewer;
      viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape);
      viewer.setMainQmlFile(QLatin1String("qml/Raker/main.qml"));
      viewer.showExpanded();
  
      QObject *rootObject = viewer.rootObject();
  
      QTimer *timmer = new QTimer;
      timmer-&gt;setInterval(1000);
  
      TimeControl *timcon = new TimeControl;
  
      scorecontrol *scorer = new scorecontrol;
  
      Retry *probeer = new Retry;
  
      QObject::connect(timmer, SIGNAL(timeout()), timcon, SLOT(updateTime()));
      QObject::connect(timcon, SIGNAL(setTime(QVariant)), rootObject, SLOT(setTime(QVariant)));
      QObject::connect(rootObject, SIGNAL(blockClicked(int, int)), scorer, SLOT(checkRight(int, int)));
      QObject::connect(scorer, SIGNAL(setScore(QVariant)), rootObject, SLOT(setScore(QVariant)));
      QObject::connect(scorer, SIGNAL(setState(QVariant)), rootObject, SLOT(setState(QVariant)));
  
      QObject::connect(rootObject, SIGNAL(start()), probeer, SLOT(Reetry()));
      QObject::connect(probeer, SIGNAL(start()), timmer, SLOT(start()));
      QObject::connect(probeer, SIGNAL(stop()), timmer, SLOT(stop()));
      QObject::connect(probeer, SIGNAL(start(int)), scorer, SLOT(randomNum(int)));
      QObject::connect(probeer, SIGNAL(sReset()), timcon, SLOT(reset()));
      QObject::connect(probeer, SIGNAL(tReset()), scorer, SLOT(reset()));
      QObject::connect(timcon, SIGNAL(timeOut()), scorer, SLOT(reset()));
  
      QObject::connect(timcon, SIGNAL(setState(QVariant)), rootObject, SLOT(setState(QVariant)));
      QObject::connect(timcon, SIGNAL(changeFinal()), scorer, SLOT(changeFinal()));
      QObject::connect(scorer, SIGNAL(setFinal(QVariant)), rootObject, SLOT(setFinal(QVariant)));
  
      QObject::connect(&amp;app, SIGNAL(focusL()), probeer, SLOT(focusL()));
      QObject::connect(&amp;app, SIGNAL(focusG()), probeer, SLOT(focusG()));
  
      return app.exec();
  }
  </code></pre>
  
  <p>BlockToucher.pro:</p>
  
  <pre><code># Add more folders to ship with the application, here
  folder_01.source = qml/Raker
  folder_01.target = qml
  DEPLOYMENTFOLDERS = folder_01
  
  # Additional import path used to resolve QML modules in Creator's code model
  QML_IMPORT_PATH =
  
  symbian:TARGET.UID3 = 0x2004b49f
  
  # Smart Installer package's UID
  # This UID is from the protected range and therefore the package will
  # fail to install if self-signed. By default qmake uses the unprotected
  # range value if unprotected UID is defined for the application and
  # 0x2002CCCF value if protected UID is given to the application
  symbian:DEPLOYMENT.installer_header = 0x2002CCCF
  
  # Allow network access on Symbian
  symbian {
      #TARGET.CAPABILITY += NetworkServices
  
      vendorinfo = "%{\"Gerhard de Clercq\"}" ":\"Gerhard de Clercq\""
      ICON = BlockToucher.svg
  }
  
  # If your application uses the Qt Mobility libraries, uncomment the following
  # lines and add the respective components to the MOBILITY variable.
  # CONFIG += mobility
  # MOBILITY +=
  
  # The .cpp file which was generated for your project. Feel free to hack it.
  SOURCES += main.cpp \
      timecontrol.cpp \
      scorecontrol.cpp \
      Retry.cpp \
      myapp.cpp \
      myapplication.cpp
  
  # Please do not modify the following two lines. Required for deployment.
  include(qmlapplicationviewer/qmlapplicationviewer.pri)
  qtcAddDeployment()
  
  HEADERS += \
      timecontrol.h \
      scorecontrol.h \
      Retry.h \
      myapp.h \
      myapplication.h
  
  OTHER_FILES += \
      qtc_packaging/debian_fremantle/rules \
      qtc_packaging/debian_fremantle/README \
      qtc_packaging/debian_fremantle/copyright \
      qtc_packaging/debian_fremantle/control \
      qtc_packaging/debian_fremantle/compat \
      qtc_packaging/debian_fremantle/changelog
  compat \
      qtc_packaging/debian_fremantle/changelog
  </code></pre>