Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我们没有';Qt 4.8x中的t子类QThread?_Qt_Qthread_Qeventloop - Fatal编程技术网

当我们没有';Qt 4.8x中的t子类QThread?

当我们没有';Qt 4.8x中的t子类QThread?,qt,qthread,qeventloop,Qt,Qthread,Qeventloop,我读过两种使用QThread的方法。 如果我有一个Worker类,它继承了QObject(如中所示),那么我应该如何创建和管理本地QEventLoop来处理信号/插槽?我不想内存泄漏。 应如何在工作线程中创建QNetworkAccessManager,如中所述?如果您没有子类化QThread,它有自己的事件循环: 默认情况下,run()通过调用exec()启动事件循环,并在线程内运行Qt事件循环 使用信号和插槽可以轻松管理工人完成的工作: (…)您可以自由地将辅助线程的插槽连接到任何线程中任何对

我读过两种使用QThread的方法。 如果我有一个Worker类,它继承了QObject(如中所示),那么我应该如何创建和管理本地QEventLoop来处理信号/插槽?我不想内存泄漏。
应如何在工作线程中创建QNetworkAccessManager,如中所述?

如果您没有子类化
QThread
,它有自己的事件循环:

默认情况下,run()通过调用exec()启动事件循环,并在线程内运行Qt事件循环

使用信号和插槽可以轻松管理工人完成的工作:

(…)您可以自由地将辅助线程的插槽连接到任何线程中任何对象的任何信号。由于一种称为排队连接的机制,跨不同线程连接信号和插槽是安全的


这意味着您通常不需要自己关心任何事件循环(除非您需要特殊行为)。只需将线程的
started
信号连接到辅助对象的任何插槽,并确保设置了某种删除链:辅助对象发出信号导致线程停止并被删除,或者相反,双向工作,取决于您的情况。

QThread在调用其函数时启动自己的事件循环。好的,那么如何在worker中创建QNetworkAccessManager呢?
QNetworkAccessManager
中描述的是异步的,所以我不知道为什么需要在不同的线程中创建它,但它与在主线程中创建它没有什么不同。像在任何其他类中一样创建它。