Утечка памяти — не единственная проблема, с которой мы можем столкнуться. В нашем первоначальном проекте приложения подразумевалось, что у нас будет только одно главное окно. При работе со многими окнами каждое главное окно будет иметь свой список файлов, открывавшихся последними, и свои параметры работы. Очевидно, что список последних открывавшихся файлов должен относиться ко всему приложению. Это можно обеспечить очень просто путем объявления статической переменной
foreach (QWidget *win, QApplication::topLevelWidgets()) {
if (MainWindow *mainWin = qobject_cast
mainWin->updateRecentFileActions();
}
Здесь используется конструкция Qt
Приложения, обеспечивающие работу с одним документом в главном окне, называются приложениями с однодокументным интерфейсом (SDI — single document interface). Распространенной альтернативой ему в Windows стал многодокументный интерфейс (MDI — multiple document interface), когда приложение имеет одно главное окно, в центральной области которого могут находиться окна многих документов. С помощью средств разработки Qt можно создавать как приложения SDI, так и приложения MDI на всех поддерживаемых платформах. На рис. 3.17 показан вид приложения Электронная таблица при использовании обоих подходов. Интерфейс MDI рассматривается в главе 6 («Управление компоновкой»).
Экранные заставки
Многие приложения при запуске выводят на экран заставки. Некоторыми разработчиками заставки используются, чтобы сделать менее заметным медленный запуск приложения, а в других случаях это делается для удовлетворения требований отделений, отвечающих за маркетинг. Можно очень просто добавить заставку в приложение Qt, используя класс
Класс
Ниже приводится пример функции
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;
08 splash->showMessage(QObject::tr("Setting up the main window…"),
09 topRight, Qt::white);
10 MainWindow mainWin;
11 splash->showMessage(QObject::tr("Loading modules…"),
12 topRight, Qt::white);
13 loadModules();
14 splash->showMessage(QObject::tr("Establishing connections…"),
15 topRight, Qt::white);
16 establishConnections();
17 mainWin.show();
18 splash->finish(&mainWin);
19 delete splash;
20 return app.exec();
21 }
Теперь мы завершили пользовательский интерфейс приложения Электронная таблица. В следующей главе мы реализуем базовые функции электронной таблицы и на этом завершим построение этого приложения.
Глава 4. Реализация функциональности приложения