关于QT信号和槽机制的重复绑定错误及改正

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于QT信号和槽机制的重复绑定错误及改正相关的知识,希望对你有一定的参考价值。

  之前做过一个作业,是编写五子棋、围棋游戏,因为需要界面,所以选择了QT框架。Qt 的核心机制之一是信号与槽,主要用来进行两个对象之间的通信。当一个对象状态改变时,可以发出一个信号,另一个对象则执行与这个信号绑定的槽函数,这种方式可以用来传递参数,也可以进行反馈行为。

  这次作业主要涉及了三个类,分别为玩家类、棋盘类和棋局类。玩家类保存玩家信息,棋盘类保存棋盘上的落子信息,棋局类则保存对局信息(胜负、计时等),两个玩家可以多次对弈。这次作业中的其中一个步骤是玩家点击棋盘位置后,发出信号,然后棋盘进行落子。进行测试的时候,单次棋局无错误,但是一旦结束棋局,两个玩家退出后再次进入,就会发生错误,玩家单次点击会触发多次落子,且重进棋局次数越多,单次点击后的落子次数越多。

  经过多次测试之后发现,在进入棋局的时候进行了两个玩家之间的信号绑定,退出棋局不会销毁玩家间的信号,因此相同的两个玩家再次进入棋局则会导致对同一个信号和槽再次进行绑定,所以单次点击会多次发出同一信号。网上查阅解决办法,得知可以设置参数使得信号只绑定一次,但是尝试后无效,。因此,改变设计思路,将两个玩家间的信号绑定改变为玩家与棋局之间的信号绑定,借由棋局来传递消息。当退出棋局时,棋局对象销毁,信号也随之销毁,这样就不会产生重复绑定的情况,问题得以解决。

以上是关于关于QT信号和槽机制的重复绑定错误及改正的主要内容,如果未能解决你的问题,请参考以下文章

Qt 6.x中的信号和槽介绍及示例

QT学习_常用类及信号和槽

qt信号和槽机制的问题

PyQt5系列教程信号和槽

Qt:不通过信号和槽机制恢复首选项

Qt5跨线程信号和槽