void camera_func::keyPressEvent(QKeyEvent * e)
{
switch (e->key())
{
case Qt::Key_Enter:
resultingpic1 = new QPixmap("/opt/Qtopia/pics/resultingpic_1.png");
resultingpic2 = new QPixmap("/opt/Qtopia/pics/resultingpic_2.png");
resultingpic3 = new QPixmap("/opt/Qtopia/pics/resultingpic_3.png");
resulting = new QLabel(this, "resulting");
CHECK_PTR(resulting);
resulting->setGeometry(QRect(0, 0, 320, 240));
resulting->setPixmap(*resultingpic1);
resulting->show();
this->show();
this->showFullScreen();
update();
qApp->processEvents();
//我想实现:当程序执行testforloop时循环显示上面三张带有进度指示的图,请问我该怎么做?
//目前我这种做法只能显示一幅图,无法给人一种动态的感觉
testforloop();//此函数比较耗时,我用打印输出一千次来模拟这个时间
update();
break;
case Qt::Key_Left:
break;
case Qt::Key_Up:
break;
case Qt::Key_Down:
break;
default:
QDialog::keyPressEvent(e);
break;
}
}
void camera_func::testforloop()
{
for(int i=0;i<1000;i++)
printf("testforloop\n");
}
Qt软件环境是Qtopia 2.2.0
我想实现:当Key_Enter按键按下,在调用testforloop时循环显示resultingpic1.png、resultingpic2.png、resultingpic3.png这3张图,请问我该怎么实现?
我自己想了2个方法:下面红色代码替代上面按键处理函数中的红色代码
1、将此三张图做出一个gif文件,通过显示gif图片来实现动态的效果,此方法如果能成功应该是最简单的,程序如下
QMovie movie("/opt/Qtopia/pics/resultingpic.gif");
movie.setBackgroundColor(black);
movie.unpause();
resulting->setMovie(movie);
resulting->show();
this->show();
this->showFullScreen();
update();
qApp->processEvents();
此方法无法显示gif,具体原因未知,如果有哪位在Qtopia上实现过显示gif文件,恳请指点迷津。
2、通过定时器来实现,当Key_Enter按键按下,启动定时器,程序如下
changepngtimer = startTimer(50);
update();
qApp->processEvents();
//以下是定时触发调用函数,通过打印changepngtimer来模拟图片显示程序,用来测试程序执行的先后关系
void camera_func::timerEvent(QTimerEvent * event)
{
if (event->timerId() == changepngtimer)
printf("changepngtimer!\n");
}
发现此方法也不可行,打印结果如下
testforloop
testforloop
testforloop
testforloop
testforloop
testforloop
testforloop
testforloop
testforloop
testforloop
testforloop
testforloop
testforloop
testforloop
打印完1000个testforloop之后才每隔50ms打印出一个changepngtimer!
changepngtimer!
changepngtimer!
changepngtimer!