QSplashScreen消失得太快



我正在尝试在启动应用程序之前显示QSplashScreen我遇到的问题是QSplashScreen消失得太快了。我希望它在真正的应用程序加载之前显示2秒钟。下面是我为显示错误而构建的小示例:

#include <QApplication>
#include <QSplashScreen>
#include <QTimer>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSplashScreen *splash = new QSplashScreen;
splash->setPixmap(QPixmap(":/dredgingSplash.png"));
splash->show();
Qt::Alignment topRight = Qt::AlignRight | Qt::AlignTop;
splash->showMessage(QObject::tr("Setting up the main window..."), topRight, Qt::white);
QTimer::singleShot(2500, splash, SLOT(close()));
MainWindow w;
QTimer::singleShot(2500, &w, SLOT(show()));
splash->showMessage(QObject::tr("loading modules..."), topRight, Qt::white);
splash->showMessage(QObject::tr("Establishing Connections..."), topRight, Qt::white);
w.show();
delete splash;
return a.exec();
}

使用官方文档中的QSplashScreen::finish()编辑

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSplashScreen *splash = new QSplashScreen;
splash->setPixmap(QPixmap(":/dredgingSplash.png"));
splash->show();
Qt::Alignment topRight = Qt::AlignRight | Qt::AlignTop;
splash->showMessage(QObject::tr("Setting up the main window..."), topRight, Qt::white);
MainWindow w;
splash->showMessage(QObject::tr("loading modules..."), topRight, Qt::white);
splash->showMessage(QObject::tr("Establishing Connections..."), topRight, Qt::white);
w.show();    
splash->finish(&w);
return a.exec();
}

使用类编辑2

#include <QApplication>
#include <QSplashScreen>
#include <QTimer>
class ShowImageTime {
public:
void slInit();
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSplashScreen *splash = new QSplashScreen;
splash->setPixmap(QPixmap(":/dredgingSplash.png"));
splash->show();
Qt::Alignment topRight = Qt::AlignRight | Qt::AlignTop;
splash->showMessage(QObject::tr("Setting up the main window..."), topRight, Qt::white);
MainWindow w;
QTimer::singleShot(3000, splash, SLOT(close()));// close splash after 4s
QTimer::singleShot(3000, &w, SLOT(ShowImageTime::slInit(this->show)));// mainwindow reappears after 4s
splash->showMessage(QObject::tr("loading modules..."), topRight, Qt::white);
splash->showMessage(QObject::tr("Establishing Connections..."), topRight, Qt::white);
w.show();    
splash->finish(&w);
return a.exec();
}

我试着玩QTimer,因为我认为这可能是由于加载优先级而产生的潜在问题,但不幸的是,如果我用QTimer::singleShot(12500, splash, SLOT(close()));甚至更高的数字更改QTimer::singleShot(2500, splash, SLOT(close()));,实际上没有区别,所以我不确定为什么这不是一个选项。

我也遇到了这个来源,我也遵循了官方文件,但这也没有帮助我解决问题。这篇文章还表明,这个问题一直与QTimer有关,但我不明白是怎么回事,因为更大或更小的间隔似乎不算数。

QSplashScreen停留2秒而不是立即消失(甚至看不到它(,我错过了什么?谢谢你指出了正确的方向。

问题是,您的代码正在启动计时器,然后继续运行。因此,主窗口被创建、显示,并且SplashScreen被删除/完成。计时器的timout功能将在所有这些发生后触发。这就是为什么它关闭得如此之快。

如果应用程序启动很慢,通常会显示SplashScreens,因为后台有很多事情要做。在您的情况下,基本上没有负载,代码执行速度极快。

您可以在调用splash->show()后立即使用2秒的睡眠调用,也可以将关闭SplashScreen的所有代码放在计时器的时间窗口中,并在那里删除SplashScreen。

相关内容

  • 没有找到相关文章

最新更新