我生成了一个二级线程来执行一些繁琐的工作,将目标QTextBrowser传递给它,并希望它能够通过insertHtml()将运行时消息输出到QTextBrowser。有时它可以工作,但最终会导致应用程序崩溃。
最初,我使用print(),并将stdout和sderr重定向到QTextBrowser。效果很好。因为我需要丰富的文本功能,所以我放弃了这个方法。
在GUI应用程序中,主线程也称为GUI线程,因为它是唯一允许执行GUI相关操作的线程。 如前所述,每个程序在启动时都有一个线程。这个线程被称为“主线程”(在Qt应用程序中也称为"GUI线程“)。Qt必须在这个线程中运行。所有的小部件和几个相关的类,例如QPixmap,都不能在二级线程中工作
我不太确定。我需要有人来证实这一点。并且可能会提出一种常规的方法来实现它。
发布于 2016-06-16 12:21:19
通常,GUI类(widgets +一些其他类)只应在主线程中使用,正如您在问题中引用的文档中所述。所以,是的,不要在新线程中乱搞QTextBrowser。
docs还声明:http://doc.qt.io/qt-5/threads-reentrancy.html。
但是您应该注意到,insertHtml是一个插槽。因此,您可以很容易地将一个信号连接到另一个线程中发出的信号(只是不要显式地将其设置为直接连接)。
https://stackoverflow.com/questions/37858645
复制相似问题