【发布时间】:2014-09-04 21:14:40
【问题描述】:
我正在尝试使用 setPixmap 通过 Qlabel 显示一系列图像。我有一个包含图像文件名的 QStringList 和一个 for 循环,它在每个图像之后等待 5 秒来遍历图像。但是,只会显示最后一个图像文件。目前,在第一次迭代等待期间屏幕保持空白,直到最终显示最后一张图像。我读过使用 for 循环不起作用,我应该使用信号和插槽。不过,我对这个概念很陌生,我真的很感激有一个例子可以为我指明正确的方向。
这是我当前的代码:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),ui(new Ui::MainWindow){
ui->setupUi(this);
QStringList images;
QString imageName;
images << "redScreen.png" << "blueScreen.png" << "greenScreen.png";
for(int x=0; x < images.size(); x++){
imageName = images.at(x);
this->displayScreen(imageName, 5);
}
}
void MainWindow::displayScreen(QString imageName, int wait){
QTimer t;
QEventLoop loop;
QPixmap myImage;
myImage.load(":/images/" + imageName);
ui->imageLabel->setPixmap(myImage);
ui->imageLabel->repaint();
// 5 second wait between next iteration
t.start(wait*1000);
connect(&t, SIGNAL(timeout()), &loop, SLOT(quit()));
loop.exec();
}
【问题讨论】:
-
为什么在这种情况下使用 QEventLoop?
-
我用它作为延迟