QTimer :: singleShot () ищет указанный слот в родительском классе данного объекта, а не сам объект

Я новичок в Qt. Я внес несколько простых изменений в существующее приложение Qt, но еще не создал ни одного с нуля.
У меня также нет большого опыта работы с некоторыми аспектами C ++ в целом (наследование классов и т. Д.).

Я создал новый проект на основе Code :: Blocks Qt4 и немного изменил шаблон. Я добавил два файла.
Сейчас проект содержит три файла: main.cpp, app.h и app.cpp.
Это содержимое 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();
}

Вот как выглядит app.h :

#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

А это app.cpp :

#include "app.h"

#include <QDebug>

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

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

Я ожидал, что программа распечатает «тайм-аут, вызванный» через одну секунду после запуска. К сожалению, это не работает. Когда вызывается QTimer :: singleShot () , консоль сообщает:

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

Я понятия не имею, как с этим бороться. Заранее спасибо.

8
задан rhino 8 January 2012 в 13:14
поделиться