繁体   English   中英

强制更新Qt GUI

[英]Forcing the Qt GUI to update

我正在Qt中编写一个棋盘游戏,在该棋盘中,玩家进行移动之后,计算机AI必须暂停并思考一段时间。 但是,在考虑时,似乎直到执行完每一行代码后,屏幕才会更新。 因此,用户将单击一个正方形,几秒钟后什么也看不见,然后突然看到他的移动计算机移动的结果。

为了解决此问题,我尝试创建一个新线程,AI在其上运行其代码,然后将其片段放置在板上。 但是,有时(这是非常不一致的),在计算机采取措施后,游戏会崩溃。

你们也可以:

  1. 告诉我如何强制MainWindow更新其内容
  2. 帮助我尝试调试崩溃的问题(我是线程的新手)

编辑 -我尝试按照suszterpatt的建议设置断点,并且该程序似乎在调试器中始终崩溃(不是在设置断点之前)。

无论如何,当我逐步执行程序时,它似乎可以很好地通过run函数,直到到达结尾括号为止,然后如果我逐步run该程序,则跳到qthread_win.cpp第317 qthread_win.cpp

finish(arg); //line 317
return 0;

如果我走那条线,调试器将冻结,并且Qt将在20秒后提醒我。 如果我继续,则会收到“此应用程序已请求运行时以异常方式终止它的消息”消息,该消息是在我未调试时程序偶尔崩溃时收到的。

我现在应该怎么办?

崩溃的原因可能是多种原因,但是如果我不得不猜测,我可能会说您可能正在从AI线程调用GUI对象的方法(标签,文本框,游戏板等)。

在Qt中,线程相互通信的方式是通过一种称为信号和插槽的机制进行的:AI线程应公开一组信号,即'beginThink','endThink',UI线程应向这些信号注册(带有插槽)并做出相应的反应。 在文档中对此进行了详尽的记录。

尝试将代码移出单独的线程。 一旦工作,您可以尝试将其移回,您将知道与线程相关的所有问题。 我认为如果所有更新都在同一线程上,您的更新问题将消失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM