Я пытаюсь показать 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(2500, splash, SLOT(close()));
с QTimer::singleShot(12500, splash, SLOT(close()));
или даже более высокими числами, в буквальном смысле нет никакой разницы, поэтому я не уверен, почему это не вариант.
Также я наткнулся на этот источник и я также следовал официальная документация но это также не помогло мне разобраться в проблеме. Также этот пост предполагает, что проблема по-прежнему связана с QTimer
, но я не вижу, как, так как большие или меньшие интервалы, кажется, не учитываются.
Чего мне не хватает, чтобы сохранить QSplashScreen
остаться на 2 секунды вместо того, чтобы исчезнуть (или даже не увидеть это) сразу? Спасибо за указание в правильном направлении.