問題は、while()
ループが実行されているときに、イベント ループに制御が返されないことです。イベント ループは、キューに入れられた再描画イベントなどをディスパッチします。おそらく、次のように、タイマーによってトリガーされるスロットで一度に 1 つの画像を実行することをお勧めします。
class Gui {
Q_OBJECT
...
protected slots:
void openFile(const QString &);
void nextImage();
protected:
QTimer imageTimer;
};
void Gui::Gui(...)
{
...
connect(imageTimer, SIGNAL(timeout()), SLOT(nextImage());
...
}
void Gui::openFile(const QString & fileName)
{
const int imagePeriod = 1000/25; // [ms], set to 25 frames per second
...
imageTimer.start(imagePeriod);
}
void Gui::nextImage()
{
QImage p;
// read image from the file onto the image
ui.label->setPixmap(p);
// no need to call update() on the label!
}