说明
本文记录了自己在写一个五子棋游戏中的所遇到的一个问题,我被这个小问题卡了好久才解决。作为一个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
。文章来源:https://www.toymoban.com/news/detail-832802.html
// 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
。文章来源地址https://www.toymoban.com/news/detail-832802.html
到了这里,关于Qt - 不同类之间槽函数和信号的连接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!