QTimer::singleShot() recherche pour le logement indiqué dans le parent de l'objet de classe, et non l'objet lui-même

Je suis assez nouveau à l'intervalle Qt. J'ai fait quelques modifications simples à une application Qt, mais je n'ai pas créé tout à partir de zéro encore.
Je n'ai pas vraiment beaucoup d'expérience avec certains aspects du C++ en général (l'héritage de classe, etc).

J'ai créé un nouveau Code::Blocks Qt4-fondé du projet et modifié le modèle un peu. J'ai ajouté deux fichiers.
Actuellement, le projet contient trois fichiers: main.cpp, app.h et app.cpp.
Ceci est le contenu de main.cpp:

#include <QTimer>

#include "app.h"

int main(int argc, char* argv[]) {
    TestApp app(argc, argv);

    QTimer::singleShot(1000, &app, SLOT(timeout()));

    return app.exec();
}

C'est ce que app.h ressemble:

#ifndef APP_H_INCLUDED
#define APP_H_INCLUDED

#include <QApplication>

class TestApp: public QApplication {
    public:
    TestApp(int &argc, char **argv);
    public slots:
    void timeout();
};

#endif

Et c'est app.cpp:

#include "app.h"

#include <QDebug>

TestApp::TestApp(int &argc, char **argv): QApplication(argc, argv) {
}

void TestApp::timeout() {
    qDebug() << "timeout called";
}

J'attendais le programme d'impression de "temps mort" d'une seconde après le démarrage. Malheureusement, cela ne fonctionne pas. Lorsque QTimer::singleShot() est appelée, la console dit:

Object::connect: No such slot QApplication::timeout() in [path to the main.cpp file]
Object::connect:  (receiver name: 'QtTests')

Je n'ai aucune idée de comment faire face à cela. Je vous remercie à l'avance.

OriginalL'auteur rhino | 2011-12-17