说明
本文记录了自己在写一个五子棋游戏中的所遇到的一个问题,我被这个小问题卡了好久才解决。作为一个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
。