信号の送信者としてQTimerを使用して信号とスロットを接続しようとしています。残念ながら、以下のコードをコンパイルすると、プログラムは実行されますが、「game.cppにそのようなスロットQObject :: flip()はありません」という警告が表示されます。
スロットが正しく定義されていないようです。QTimerに関するYoutubeチュートリアルを使用すると、ゲームクラス内に「Q_OBJECT」マクロを追加する必要があるように聞こえました(これは以下でコメント化されています)。ただし、コメントを外すと、プログラムのコンパイルに失敗し、「'vtableforGame'への未定義の参照」というエラーメッセージが表示されます。
タイマーの信号とスロットを正しく接続するにはどうすればよいですか?
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;
}
}