是否允许使用辅助线程来执行qtextbrowser.inserthtml()



i产生一个辅助线程以执行一些乏味的作业,将目标QTextBrowser传递给它,并希望它可以通过insertHtml()输出运行时消息到QTextBrowser。有时它有效,但最终使应用程序崩溃。

最初,我使用 print(),然后将stdout和sderr重定向到 QTextBrowser。它运行良好。因为我需要丰富的文本功能,所以我丢弃了此方法。

从这里或这里或这里,我注意到它可能不合法。

在GUI应用中,主线程也称为GUI线程,因为它是唯一允许执行GUI相关操作的线程。

如前所述,每个程序启动时都有一个线程。该线程称为"主线程"。(在QT应用程序中也称为" GUI线程"。QT GUI必须在此线程中运行。所有小部件和几个相关类,例如qpixMap,都不在辅助线程

中使用

我不确定。我需要有人确认这一点。并可能建议一种实施它的常规方法。

一般而言,GUI类(窗口小部件 其他一些)应在主线程中使用,如您在问题中引用的文档中所述。所以是的,不要在新线程中与QTextBrowser混乱。

文档还指出: qt类仅记录为线程安全,如果它们打算由多个线程使用。如果未将函数标记为线程安全或重点,则不应从不同的线程中使用它。如果一个类未标记为线程安全或重点,则不应从不同的线程访问该类的特定实例

,您应该注意insertHtml是一个插槽。因此,您可以轻松地将信号连接到它在其他线程中发射的信号(只是不要明确地使其直接连接)。

相关内容

  • 没有找到相关文章

最新更新