【发布时间】:2014-04-12 00:40:06
【问题描述】:
我有一个带有嵌入式脚本/jit 的 Qt 应用程序。现在我想在 QTextEdit(更具体的 QPlainTextEdit)上接收脚本的输出。为此,正在发出回调。我面临的问题是,无论我尝试输出到 TextEdit 的任何内容,要么延迟到脚本完成,要么在 2-3 秒后卡住(然后延迟到脚本完成)。 我尝试使用信号和插槽进行更新,但也尝试使用直接函数调用 - 均未奏效。还重新绘制/更新 TextEdit 和父表单,甚至 QCoreApplication::flush() 确实显示很少/没有效果。好像我在做一些根本错误的事情。任何想法或示例如何实现“实时”更新?
顺便说一句,更新例程正在被调用 - 调试输出到标准输出是实时可用的。
【问题讨论】:
-
哪个线程正在执行回调?更具体地说,您在哪个线程中更新 QTextEdit?
-
它不是线程化的——这可能是问题的一部分。所以一切(据我所知)都发生在主线程中。我尝试使用线程,但是在 QThread 中启动 mono JIT 会导致与 GC 相关的崩溃(它也喜欢启动 pthreads?) - 至少在 Mac 上(在 Windows 上我没有真正的调试输出,因为我的 gdb 是静音的出于某种原因)。
-
这可能就是您的更新无法实时看到的原因。您可以尝试调用 QCoreApplication::processEvents。但真正的解决方案是在单独的线程中运行你正在做的任何事情,并使用插槽/信号来更新你的 GUI(替换你的回调)。
-
感谢您对 processEvents 的提示。我将尝试再次设置 QThread,但与此同时 processEvents 解决了我的问题。