Qt - 不同类之间槽函数和信号的连接

说明

本文记录了自己在写一个五子棋游戏中的所遇到的一个问题,我被这个小问题卡了好久才解决。作为一个Qt小白 ,如有错误请多多包含,并可以在评论区留言~~

方案一

widget类(相当于游戏主菜单)

// widget.h
Chessboard chessboard;     // 棋盘对象
Game_control gamecontrol;  // 游戏控制对象// widget.cpp
connect(&chessboard, SIGNAL(GameOver(int)), &gamecontrol, SLOT(GameIsOver(int)));

chessboard类

// chessboard.h
signals:void GameOver(int winner);                  // 游戏结束的信号// chessboard.cpp
void Chessboard::CheckWinner(){emit GameOver(winner);qDebug()<<"finish1";
}

Game_control类

// Game_control.h
public slots:void GameIsOver(int winner);          // 游戏结束槽函数// Game_control.cpp
void Game_control::GameIsOver(int winner){qDebug()<<"finish2";
}

方案二

方案一中如果在Game_control.cpp里添加Chessboard chessboard;connect(&chessboard, SIGNAL(GameOver(int)), this, SLOT(GameIsOver(int)));之后,会发现:无法输出finish2

// Game_control.h
public slots:void GameIsOver(int winner);          // 游戏结束槽函数// Game_control.cpp
Chessboard chessboard;
connect(&chessboard, SIGNAL(GameOver(int)), this, SLOT(GameIsOver(int)));void Game_control::GameIsOver(int winner){qDebug()<<"finish2";
}

可能的原因是Game_control类中的chessboardwidget类中的重复定义。
删除widget里的chessboard,而只在Game_control中定义之后,再次运行,可以看到成功输出finish2