Действия Close и Exit будут задаваться следующим образом:
01 void MainWindow::createActions
02 {
03 closeAction = new QAction(tr("&Close"), this);
04 closeAction->setShortcut(tr("Ctrl+W"));
05 closeAction->setStatusTip(tr("Close this window"));
06 connect(closeAction, SIGNAL(triggered), this, SLOT(close));
07 exitAction = new QAction(tr("E&xit"), this);
08 exitAction->setShortcut(tr("Ctrl+Q"));
09 exitAction->setStatusTip(tr("Exit the application"));
10 connect(exitAction, SIGNAL(triggered),
11 qApp, SLOT(closeAllWindows));
12 }
Слот
Можно подумать, что на этом завершается построение приложения, работающего со многими документами. К сожалению, одна проблема оказалась незамеченной. Если пользователь будет постоянно создавать и закрывать главные окна, в конце концов может не хватить памяти компьютера. Это происходит из-за того, что мы создаем виджеты
Решение состоит в установке признака
01 MainWindow::MainWindow
02 {
03 setAttribute(Qt::WA_DeleteOnClose);
04 }
Это указывает Qt на необходимость удаления окна при его закрытии. Кроме
Утечка памяти — не единственная проблема, с которой мы можем столкнуться. В нашем первоначальном проекте приложения подразумевалось, что у нас будет только одно главное окно. При работе со многими окнами каждое главное окно будет иметь свой список файлов, открывавшихся последними, и свои параметры работы. Очевидно, что список последних открывавшихся файлов должен относиться ко всему приложению. Это можно обеспечить очень просто путем объявления статической переменной
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 («Управление компоновкой»).
Экранные заставки