接上一篇博客(http://blog.csdn.net/usbgood/article/details/28720183)的问题继续。
问题是:如何在一个QLabel里连续的刷入图片,产生放幻灯片的效果。
上一次我用的方法是:把图片的路径存入到一个list里面,然后直接循环遍历那个list。
然后失败了。至于原因,个人根据过程来看有两种原因:
1、代码写的有问题。此处就不把原代码贴出来了。
2、直接for循环然后每次timer的时间太短,导致问题。
后面根据这个两个猜测换过了一个思路。
定义一个全局变量用来记录图片所在的位置。
然后入口函数中启动时间指针。
然后在另一个函数中实现一张图片一张图片的画。
具体代码如下:
int g_iCount = 0; //全局变量
//写在构造函数中的
connect(ui->pushButton_Start, SIGNAL(clicked()), this, SLOT(OnMakeMovie()));
connect(m_Timer, SIGNAL(timeout()), this, SLOT(OnStartDisplayPicture()));
connect(ui->pushButton_Stop, SIGNAL(clicked()), this, SLOT(OnStopDisplayPicture()));
//各个槽函数的实现
void MakeMovie::OnMakeMovie()
{
m_Timer->start();
return ;
}
void MakeMovie::OnStartDisplayPicture()
{
m_Timer->stop();
if(m_LstPicturePath.empty())
{
return ;//此处应提醒用户没有图片
}
if(g_iCount > m_LstPicturePath.size())
{
g_iCount = 0;
}
const QString& strPath = m_LstPicturePath.at(g_iCount);
m_Pix.load(strPath);
m_Pix = m_Pix.scaled(m_LableW, m_LableH, Qt::IgnoreAspectRatio);
ui->label_Picture->setPixmap(m_Pix);
m_Timer->start(1 * 1000);
++g_iCount;
}
void MakeMovie::OnStopDisplayPicture()
{
m_Timer->stop();
return ;
}