首页 文章

Qt“没有这样的插槽QObject”警告

提问于
浏览
3

我正在尝试使用QTimer作为信号的发送方连接信号和插槽 . 不幸的是,当我编译下面的代码时,程序运行,但是我收到一个警告:“在game.cpp中没有这样的插槽QObject :: flip()” .

似乎我的插槽没有正确定义 . 使用Youtube tutorial关于QTimer,听起来好像我需要在游戏类中添加"Q_OBJECT"宏(这在下面已注释掉) . 但是,如果我取消注释它,程序将无法编译,提供错误消息:"undefined reference to 'vtable for Game'" .

如何正确连接定时器的信号和插槽?

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;
    }
}

1 回答

  • 5

    您需要 Q_OBJECT 宏才能识别插槽 .

    编译时错误是由缺少MOC生成的单元引起的 . 取消注释该行并删除生成的Makefile以强制qmake重新生成必要的链接 .

相关问题