从另一个线程Qt向主窗口添加一个小部件

时间:2012-10-15 08:42:23

标签: qt qt4

我刚开始在Qt爬行。在我的Ubuntu机器上安装了qt4并尝试了一些基本的例子。现在我正在尝试开发一个多线程应用程序。首先,我很困惑是使用pthreads还是Qthreads。有人能告诉我哪一个更好用。?

此外,在我的应用程序中,我将从一个线程向另一个线程发送一些值。第二个线程将打印在一个框中。我的查询是,主线程以外的线程是否可以将小部件添加到主窗口?

2 个答案:

答案 0 :(得分:3)

  1. 使用QThread。它在内部使用pthreads,但您不依赖于pthreads,并且可以(可能)在其他平台和操作系统上运行您的程序。
  2. 您无法从工作线程创建QWidget个实例。 Qt中只有一个GUI线程:运行main()的线程。只有这个线程可以创建任何与窗口管理器(窗口小部件和像素图)通信的东西。
  3. 因此,在线程之间,您只能传递数据。 GUI线程自己管理图形用户界面,只接受来自工作线程的数据。查看有关如何实现多线程应用程序的Qt文档。

答案 1 :(得分:0)

您可以使用QApplication,其中包含一个静态方法topLevelWidgets(),您可以在其中找到一个主要小部件。

像这样:

#include <QApplication>   

foreach(QWidget *widget, QApplication::topLevelWidgets())
{
    if(widget->accessibleName() == "YourMainWidgetName")
    {
        myMainTopWidget = widget;
    }
}

当您将值从一个线程发送到另一个线程时,请使用信号和插槽。它们是线程安全且易于使用的。