Предшествующее окно QSplashScreen
Оглавление
- Класс главного окна QMainWindow
- Предшествующее окно QSplashScreen
- Класс действия QAction
- SDI- и MDI-приложения в Qt
- Создание SDI-приложений в Qt
- Создание MDI-приложений в Qt
При запуске многие приложения показывают, так называемое, предшествующее окно (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