Qt Splash Screen не отображается

У меня есть этот код, я хочу, чтобы он показывал заставку, так как он будет больше, сделав своего рода таймер, чтобы можно было видеть, как работает заставка. Проблема в том, что я не вижу заставку, но код будет работать, пока заставка не появляется, отправляя меня прямо в главное окно, не показывая экран заставки.
Вот мой код

main.cpp

#include <iostream>

#include <QApplication>
#include <quazip/quazip.h>

#include "splashwindow.h"#include "mainwindow.h"#include "database.h"
int main(int argc, char *argv[])
{
/* Define the app */
QApplication app(argc, argv);

/* Define the splash screen */
SplashWindow splashW;
/* Show the splash screen */
splashW.show();

/* Download the database */
/* Define the database */
Downloader db;
/* Donwloading the database */
db.doDownload();

/* Unzip the database */
/* Define the database */
//Unzipper uz;
//uz.Unzip();

for(int i = 0; i < 1000000; i++)
{
cout << i << endl;
}

/* Close the splash screen */
splashW.hide();
splashW.close();

/* Define the main screen */
MainWindow mainW;
/* Show the main window */
mainW.showMaximized();

return app.exec();
}

splashwindow.cpp

#include <iostream>
#include <QStyle>
#include <QDesktopWidget>

#include "splashwindow.h"#include "ui_splashwindow.h"#include "database.h"
/* Splash screen constructor */
SplashWindow::SplashWindow (QWidget *parent) :
QMainWindow(parent), ui(new Ui::SplashWindow)
{
ui->setupUi(this);
/* Set window's flags as needed for a splash screen */
this->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint | Qt::SplashScreen);
}

/* Splash screen destructor */
SplashWindow::~SplashWindow()
{
delete ui;
}

splashwindow.h

#ifndef SPLASHWINDOW_H
#define SPLASHWINDOW_H

#include <QMainWindow>

namespace Ui {
class SplashWindow;
}

class SplashWindow : public QMainWindow
{
Q_OBJECT

public:
explicit SplashWindow(QWidget *parent = 0);
~SplashWindow();

private:
Ui::SplashWindow *ui;
};

#endif // SPLASHWINDOW_H

Команды выполняются таким образом, что заставка не появится до их запуска, не показывая, что я не могу найти способ исправить.

[РЕДАКТИРОВАТЬ] Часть кода, соответствующая закрытию, была помещена не на место, хотя она все еще не работает после правильной установки.

4

Решение

У вас есть как минимум две проблемы:

  • Вы отправляете основной поток в цикл блокировки, и у него нет возможности обрабатывать события, включая показ вашего окна. Это требует некоторой обработки событий, поэтому вам необходимо вызвать следующий метод перед циклом while:

void QCoreApplication :: processEvents (QEventLoop :: ProcessEventsFlags flags = QEventLoop :: AllEvents) [статические]

  • Я бы предложил использовать QSplashScreen в первую очередь согласно документация. Обратите внимание на явный вызов для обработки событий в примере. Код ниже работает хорошо для меня.

main.cpp

#include <QApplication>
#include <QPixmap>
#include <QMainWindow>
#include <QSplashScreen>

#include <QDebug>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPixmap pixmap("splash.png");
QSplashScreen splash(pixmap);
splash.show();
app.processEvents();
for (int i = 0; i < 500000; ++i)
qDebug() << i;
QMainWindow window;
window.show();
splash.finish(&window);
return app.exec();
}

main.pro

TEMPLATE = app
TARGET = main
greaterThan(QT_MAJOR_VERSION, 4):QT += widgets
SOURCES += main.cpp
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]