如何在qt,opencv中一个接一个地显示目录中的所有图像

时间:2014-09-03 06:33:52

标签: c++ qt

我尝试在QT Creator中制作GUI应用程序。我想显示所选目录中的所有图像(一种幻灯片放映),我阅读QDir,QStringlist,QFileDialog类引用但它不起作用。它只显示最后一张图像在文件夹中。

 for(int i=0;i<10;i++)
 {

   QImage image2(directory+"/"+fileList[i]);
   ui->label_pic2->setPixmap(QPixmap::fromImage(image2));
   //Sleep(550);
 }

睡眠功能仅允许缓慢加载而不是逐个显示。

1 个答案:

答案 0 :(得分:2)

首先,您需要确保只在未执行代码且应用程序可以处理传入的events时更新GUI。如果您创建一个无限循环,您的GUI将被更新。这就是为什么你只能看到最后一张图片 - 因为你不让GUI更新。

您可以强制应用程序按QCoreApplication::processEvents()处理传入的事件。在这种情况下,您可能会看到快速闪烁的图像。但是在显示每张图像后你肯定需要暂停一下。而Sleep可能会在那里工作,但在暂停期间,您的应用程序将被冻结而无法处理事件。

这就是为什么建议您使用QTimer。它在一定时间内调用一个插槽。所有其他时间应用程序正在处理消息和更新GUI等。调用插槽后,您可以切换label以显示下一张图像。这正是你所需要的。

要点:
1.创建QTimer,设置间隔并将其连接到插槽,启动计时器 2.在插槽实现中,读取列表中的下一个图像并将其分配给label

提示:要跟踪显示的图像,请创建一个整数成员变量。在开始动画时将其设置为0,在插槽中增加它。