QT 4: программирование GUI на С++ | страница 64
>foreach (QWidget *win, QApplication::topLevelWidgets()) {
> if (MainWindow *mainWin = qobject_cast
> mainWin->updateRecentFileActions();
>}
Здесь используется конструкция Qt foreach (она рассматривается в главе 11) для прохода по всем имеющимся в приложении виджетам и делается вызов функции updateRecentFileItems() для всех виджетов типа MainWindow. Аналогичным образом можно синхронизировать установку опций ShowGrid и Auto—Recalculate или убедиться в том, что не загружены два файла с одинаковым именем.
Рис. 3.17. Однодокументный и многодокументный интерфейсы.
Приложения, обеспечивающие работу с одним документом в главном окне, называются приложениями с однодокументным интерфейсом (SDI — single document interface). Распространенной альтернативой ему в Windows стал многодокументный интерфейс (MDI — multiple document interface), когда приложение имеет одно главное окно, в центральной области которого могут находиться окна многих документов. С помощью средств разработки Qt можно создавать как приложения SDI, так и приложения MDI на всех поддерживаемых платформах. На рис. 3.17 показан вид приложения Электронная таблица при использовании обоих подходов. Интерфейс MDI рассматривается в главе 6 («Управление компоновкой»).
Экранные заставки
Многие приложения при запуске выводят на экран заставки. Некоторыми разработчиками заставки используются, чтобы сделать менее заметным медленный запуск приложения, а в других случаях это делается для удовлетворения требований отделений, отвечающих за маркетинг. Можно очень просто добавить заставку в приложение Qt, используя класс QSplashScreen.
Класс QSplashScreen выводит на экран изображение до появления главного окна. Он также может вывести на изображение сообщение, информирующее пользователя о ходе процесса инициализации приложения. Обычно вызов заставки делается в функции main() до вызова функции QApplication::exec().
Ниже приводится пример функции main(), которая использует QSplashScreen для вывода заставки приложения, которое загружает модули и устанавливает сетевые соединения при запуске.
>01 int main(int argc, char *argv[])
>02 {
>03 QApplication app(argc, argv);
>04 QSplashScreen *splash = new QSplashScreen;
>05 splash->setPixmap(QPixmap(":/images/splash.png"));
>06 splash->show();
>07 Qt::Alignment topRight = Qt::AlignRight | Qt::AlignTop;