在Qt 4.7中流式传输QImages

时间:2010-11-26 13:08:58

标签: multithreading qt qt4

我正在Qt中构建一个GUI应用程序,其功能与Google Maps类似(即您可以平移/缩放,并显示更多地图)。目前,我正在动态加载图像的256像素块(来自硬盘)。

你可以想象,每当我平移和缩放时,这会减慢我的程序。我想使用一个单独的线程(MapLoader)来加载图像。

我的数据类有一个指向图像的三重指针(即QImage * [x] [y])。视口外的图像为null,而视口内的图像为QImage指针。

我的问题是,我希望我的画家能够访问图像数组并绘制它们(无论它们是否被加载)。同时将图像加载到阵列中而不阻止对阵列的访问。

我该如何解决这个问题?图像数组是否必须是易变的?

2 个答案:

答案 0 :(得分:0)

对于与您的情况相关的测试应用程序的QtLabs(带视频)有一个很好的演示。它是一个图像浏览器,可以在网格中加载图像。虽然作者声称它不是最佳解决方案,但我认为它应该包含一些有用的信息,用于使用线程加载内容。你可以看到它here。我认为评论部分也可能有一些有趣的链接。

答案 1 :(得分:0)

您应该能够将图像的加载产生到工作线程,并让这些线程在图像准备就绪时以某种方式向您发出信号,以及图像的位置。 (使用QtConcurrent将是我的第一个倾向。)如果使用信号/插槽连接,默认情况下Qt将确保插槽在其正确的线程中运行。因此,在UI线程中使用您的图像类,让工作线程在读取图像时发出图像信号,并使图像类中的插槽(仍在UI线程上下文中)正确存储图像。由于分配到地图和从地图读取都在同一个线程上下文中,因此您不需要使用任何易失标记或锁定。