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

时间:2019-10-27 16:14:08

标签: multithreading qt design-patterns signals-slots

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

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

1 个答案:

答案 0 :(得分:0)

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

1-如果它们是简单的非结构化类型,则可以使用QVariant来处理many types(原语和Qt类型,例如QString,QPoint等)

2-或者,您可以使用QMap之类的容器类来传递QVariant列表,如 Johannes Schaub 在评论中所述。

3-您可能还想创建与元对象系统集成的自己的Message类。然后,将其转换为QVariant进行发射。这是Qt文档中不错的Custom Type Example

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