说明
本文记录了自己在写一个五子棋游戏中的所遇到的一个问题,我被这个小问题卡了好久才解决。作为一个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类中的chessboard和widget类中的重复定义。
 删除widget里的chessboard,而只在Game_control中定义之后,再次运行,可以看到成功输出finish2。