說明
本文記錄了自己在寫一個(gè)五子棋游戲中的所遇到的一個(gè)問題,我被這個(gè)小問題卡了好久才解決。作為一個(gè)Qt小白 ,如有錯(cuò)誤請(qǐng)多多包含,并可以在評(píng)論區(qū)留言~~
方案一
widget類(相當(dāng)于游戲主菜單)
// widget.h
Chessboard chessboard; // 棋盤對(duì)象
Game_control gamecontrol; // 游戲控制對(duì)象
// widget.cpp
connect(&chessboard, SIGNAL(GameOver(int)), &gamecontrol, SLOT(GameIsOver(int)));
chessboard類
// chessboard.h
signals:
void GameOver(int winner); // 游戲結(jié)束的信號(hào)
// chessboard.cpp
void Chessboard::CheckWinner(){
emit GameOver(winner);
qDebug()<<"finish1";
}
Game_control類
// Game_control.h
public slots:
void GameIsOver(int winner); // 游戲結(jié)束槽函數(shù)
// 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)));
之后,會(huì)發(fā)現(xiàn):無法輸出finish2
。文章來源:http://www.zghlxwxcb.cn/news/detail-832802.html
// Game_control.h
public slots:
void GameIsOver(int winner); // 游戲結(jié)束槽函數(shù)
// 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
類中的重復(fù)定義。
刪除widget
里的chessboard
,而只在Game_control
中定義之后,再次運(yùn)行,可以看到成功輸出finish2
。文章來源地址http://www.zghlxwxcb.cn/news/detail-832802.html
到了這里,關(guān)于Qt - 不同類之間槽函數(shù)和信號(hào)的連接的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!