我正在尝试使用QSplashScreen
显示启动图像,我想显示图像大约2秒钟。
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QPixmap pixmap(":/images/usm.png");
QSplashScreen splash(pixmap);
splash.show();
splash.showMessage("Loading Processes");
QTimer::singleShot(2000, &splash, SLOT(close()));
MainWindow w;
w.show();
splash.finish(&w);
return a.exec();
}
但这不起作用。 QSplashScreen
出现几毫秒然后消失。试图修改时间段但似乎QSplashScreen
对象没有连接到插槽。有什么问题以及如何避免它?
答案 0 :(得分:4)
您的代码的问题是计时器没有阻止执行,因此启动屏幕已经通过splash.finish(&w)
调用关闭。你需要的是一个睡眠。你可以使用这样的QWaitCondition
:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSplashScreen splash(QPixmap(":/images/usm.png"));
splash.show();
splash.showMessage("Loading Processes");
// Wait for 2 seconds
QMutex dummyMutex;
dummyMutex.lock();
QWaitCondition waitCondition;
waitCondition.wait(&dummyMutex, 2000);
MainWindow w;
w.show();
splash.finish(&w);
return a.exec();
}
这种方法的缺点是你阻止了执行。如果您不想阻止它,那么您只需删除 splash.finish(&w)
电话:
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QPixmap pixmap(":/images/usm.png");
QSplashScreen splash(pixmap);
splash.show();
splash.showMessage("Loading Processes");
QTimer::singleShot(2000, &splash, SLOT(close()));
MainWindow w;
w.show();
return a.exec();
}
答案 1 :(得分:1)
此代码应该有效:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSplashScreen splash(QPixmap(":/images/usm.png"));
splash.showMessage("Loading Processes");
splash->show();
QMainWindow w;
QTimer::singleShot(2000, splash, SLOT(close()));
QTimer::singleShot(2500, &w, SLOT(show()));
return a.exec();
}