Qt QSplashScreen未调用插槽
我正在尝试使用Qt QSplashScreen未调用插槽,qt,qt4.8,Qt,Qt4.8,我正在尝试使用qsplashsscreen显示启动图像,我想显示图像大约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");
qsplashsscreen
显示启动图像,我想显示图像大约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
出现几毫秒,然后消失。试图修改时间段,但似乎qsplashsscreen
对象未连接到插槽。问题出在哪里?如何避免?此代码应该可以工作:
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();
}
此代码应适用于:
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();
}
代码的问题是计时器没有阻止执行,因此启动屏幕已经通过
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();
}
代码的问题是计时器没有阻止执行,因此启动屏幕已经通过
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();
}
主窗口显示正常,但QSplashScreen仍不能正常工作,因为needswell主窗口显示正常,但QSplashScreen仍不能正常工作我认为在初始化完成后,最好让主窗口发出信号,然后将其连接到启动屏幕。我认为在初始化完成后,最好让主窗口发出一个信号,并将其连接到启动屏幕。