i产生一个辅助线程以执行一些乏味的作业,将目标QTextBrowser
传递给它,并希望它可以通过insertHtml()
输出运行时消息到QTextBrowser
。有时它有效,但最终使应用程序崩溃。
最初,我使用 print()
,然后将stdout和sderr重定向到 QTextBrowser
。它运行良好。因为我需要丰富的文本功能,所以我丢弃了此方法。
从这里或这里或这里,我注意到它可能不合法。
在GUI应用中,主线程也称为GUI线程,因为它是唯一允许执行GUI相关操作的线程。
如前所述,每个程序启动时都有一个线程。该线程称为"主线程"。(在QT应用程序中也称为" GUI线程"。QT GUI必须在此线程中运行。所有小部件和几个相关类,例如qpixMap,都不在辅助线程
中使用
我不确定。我需要有人确认这一点。并可能建议一种实施它的常规方法。
一般而言,GUI类(窗口小部件 其他一些)应在主线程中使用,如您在问题中引用的文档中所述。所以是的,不要在新线程中与QTextBrowser
混乱。
文档还指出: qt类仅记录为线程安全,如果它们打算由多个线程使用。如果未将函数标记为线程安全或重点,则不应从不同的线程中使用它。如果一个类未标记为线程安全或重点,则不应从不同的线程访问该类的特定实例。
,您应该注意insertHtml
是一个插槽。因此,您可以轻松地将信号连接到它在其他线程中发射的信号(只是不要明确地使其直接连接)。