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

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

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

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

转载于:https://www.cnblogs.com/gaoyl/p/7719716.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值