Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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
C++ 如何在qt、opencv中逐个显示目录中的所有图像_C++_Qt - Fatal编程技术网

C++ 如何在qt、opencv中逐个显示目录中的所有图像

C++ 如何在qt、opencv中逐个显示目录中的所有图像,c++,qt,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));

我尝试在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);
 }
for(inti=0;ilabel_pic2->setPixmap(QPixmap::frommage(image2));
//睡眠(550);
}

睡眠功能只会使加载速度变慢,而不会一个接一个地显示。

首先,您需要了解GUI只有在代码未执行时才会更新,并且应用程序可以处理传入的数据。如果您创建一个无休止的循环,您的GUI将永远不会更新。这就是为什么您只能看到最后一个图像的原因,因为您不允许GUI被更新特德

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

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

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


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

Qt是基于事件的。最简单的方法是使用QTimer。决不要通过睡眠来阻止主线程。@hyde QTimer的工作方式类似于睡眠。没有区别。只有最后一个图像加载延迟5s等。我想看看屏幕上的幻灯片放映。“没有区别。”-这是一个相当权威的声明,考虑到您遇到了技术问题,有人在向您指出解决方案的方向……而您没有尝试看它是否有帮助。更好的反应可能是一个问题,如“使用QTimer和sleep有什么区别?”@Otantik,您可以尝试调用
QCoreApplication::processEvents()
在睡觉前让你的标签自己重新绘制,然而@hyde提出的基于计时器的解决方案似乎是更好的方法。@Otantik在非常高级的意义上,允许你的代码在X秒后被调用,
QTimer
就像睡觉一样。然而,最大的区别是,
QTimer
会工作,而睡觉则不会t(因为它停止Qt事件循环,在睡眠期间不会发生任何事情)。