3
我試圖連接一個信號和插槽使用QTimer作爲信號的發送者。不幸的是,當我編譯下面的代碼時,程序運行,但我收到一條警告:「game.cpp中沒有這樣的插槽QObject :: flip()」。Qt「沒有這樣的插槽QObject」警告
看來我的插槽沒有正確定義。使用關於QTimer的Youtube tutorial,聽起來好像我需要在遊戲類中添加「Q_OBJECT」宏(這在下面註釋)。但是,如果我取消註釋,那麼程序將無法編譯,並提供錯誤消息:「未定義的引用'遊戲vtable'」。
如何正確連接我的信號和定時器插槽?
game.h
#ifndef GAME_H
#define GAME_H
#include "player.h"
#include <QtCore>
class Game : public QObject {
//Q_OBJECT
public:
Game();
void timed_job();
public slots:
void flip();
private:
bool is_game_on;
QTimer *timer;
Player player_1;
Player player_2;
Player player_3;
};
#endif // GAME_H
game.cpp
#include "game.h"
#include <QtCore>
Game::Game() {
is_game_on = true;
}
void Game::timed_job() {
timer = new QTimer(this);
timer->start(1000);
connect(timer, SIGNAL(timeout()), this, SLOT(flip()));
}
void Game::flip() {
if(is_game_on == true) {
is_game_on = false;
}
else {
is_game_on = true;
}
}
這是一個Qt的bug - 必須手動處理makefile刪除嗎?我正在使用4.7.4。 – nairware
通常你只需手動重新運行qmake,它不完全是一個錯誤,Qt構建系統沒有什麼好的方法來檢測你何時將一個'Q_OBJECT'宏添加到頭文件中。 – Chris