Qt中线程间交换不同类型的数据

Exchanging different kinds of data between threads in Qt

这是一个设计问题。比如说,我有一个工作线程和一个 GUI 线程。工作线程做一些工作,GUI 必须显示有关此工作当前状态的信息(例如,工作线程可以处理一些文件,GUI 必须显示已处理文件的数量,对不同类型的文件有单独的计数器)。

在Qt中,线程之间的信息交换应该通过信号槽机制来完成。但是如果我有很多不同类型的信息要从一个线程传递到另一个线程,我应该为每种类型的信息创建不同的信号(例如,为每种类型的文件),还是创建一个信号(对于例如,informationUpdated(InfoContainer); 有一个特殊的结构 (InfoContainer),它将存储我要传递的数据?

这完全取决于您要发出的数据类型。

1- 如果它们是简单的非结构化类型,您可以使用 QVariant which can handle many types(基元和 Qt 类型,如 QString、QPoint 等)

2- 或者,您可以使用像 QMap 这样的容器 class 来传递 QVariant 列表,正如 Johannes Schaub 在评论中所说。

3- 您可能还想创建您自己的消息class,它与元对象系统 集成在一起。然后,将其从 Qt 文档转换为 QVariant to be emitted. Here is a good Custom Type Example

我选择最后一种方法以获得更好的集成性和可扩展性。