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

Предшествующее окно 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("My Application" "Is Ready!");

    loadModules(&splash);

    splash.finish(&lbl);

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

    return app.exec();
}

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *