Предшествующее окно QSplashScreen


При запуске многие приложения показывают, так называемое, предшествующее окно (Splash Screen). Это окно отображается на время, необходимое для инициализации приложения, и информирует о ходе запуска приложения. Зачастую такое окно используют для маскировки длительного процесса старта программы.

{рисунок}

В библиотеке Qt это окно реализовано в классе QSpiashScreen. Объект этого класса создается в функции main() до вызова метода exec() объекта приложения. Следующая программа отображает перед запуском предшествующее окно, производящее отсчет прогресса инициализации в процентах.


#include <QtGui>

void loadModules(QSplashScreen* psplash)
{
    QTime time;
    time.start();

    for (int i = 0; i < 100; ) {
        if (time.elapsed() > 40) {
            time.start();
            ++i;
        }
        psplash->showMessage("Loading modules: " 
                             + QString::number(i) + "%", 
                             Qt::AlignHCenter | Qt::AlignBottom, 
                             Qt::black
                            );
    }
}

int main (int argc, char** argv)
{
    QApplication  app(argc, argv);
    QSplashScreen splash(QPixmap("splash.png"));

    splash.show();
  
    QLabel lbl("<H1><CENTER>My Application<BR>"
               "Is Ready!</CENTER></H1>"
              );

    loadModules(&splash);

    splash.finish(&lbl);

    lbl.resize(250, 250);
    lbl.show();

    return app.exec();
}

Объект предшествующего окна создается после объекта приложения. В конструктор предшествующего окна передается растровое изображение, которое будет отображаться после вызова метода show(). Виджет QLabel представляет, в данном примере, само приложение, которое должно быть запущено. Функция loadModules() является эмуляцией загрузки модулей программы, в нее передается адрес объекта предшествующего окна, чтобы функция была в состоянии отображать информацию прогресса загрузки. Объект класса QTime используется для того, чтобы значение переменной i увеличивалось только по истечении 40 миллисекунд. Отображение информации производится при помощи метода showMessage(), в который первым параметром передается текст, вторым — расположение текста, а третьим — цвет текста. Вызов метода finish() производит закрытие предшествующего окна. Если его не закрывать, то оно останется видимым до тех пор, пока пользователь не щелкнет на нем мышью.

Читать далее: Класс действия QAction