我刚刚开始在 Qt 中爬行。在我的 Ubuntu 机器上安装了 qt4 并尝试了一些基本示例。现在我正在尝试开发一个多线程应用程序。首先,我很困惑是使用 pthreads 还是 Qthreads。谁能告诉我哪个更好用。?
在我的应用程序中,我会将一些值从一个线程发送到另一个线程。第二个线程将在一个框中打印这些。我的问题是,除了主线程之外的线程是否可以将小部件添加到主窗口?
QThread
. 它在pthreads
内部使用,但您不依赖pthreads
并且可以(可能)在其他平台和操作系统上运行您的程序。QWidget
从工作线程创建实例。Qt 中只有一个 GUI 线程:运行main()
. 只有这个线程可以创建与窗口管理器通信的任何东西(小部件和像素图)。所以在线程之间,你只通信数据。GUI 线程自己管理图形用户界面,只接受来自工作线程的数据。查看 Qt 文档以了解如何实现多线程应用程序。
您可以使用QApplication
which 具有静态方法topLevelWidgets()
,您可以在其中“找到”您的主要小部件之一。
像这样:
#include <QApplication>
foreach(QWidget *widget, QApplication::topLevelWidgets())
{
if(widget->accessibleName() == "YourMainWidgetName")
{
myMainTopWidget = widget;
}
}
当您将值从一个线程发送到另一个线程时,请使用信号和插槽。它们是线程安全的并且易于使用。