При применении данной функции
Мы модифицируем приложение Электронная таблица для обеспечения возможности работы со многими документами. Для начала нам потребуется немного видоизменить меню File:
• пункт меню File | New создает новое главное окно с пустым документом вместо повторного использования существующего главного окна;
• пункт меню File | Close закрывает текущее главное окно;
• пункт меню File | Exit закрывает все окна.
В первоначальной версии меню File не было пункта Close (закрыть), поскольку он выполнял бы ту же функцию, что и пункт меню Exit. Новая функция
01 int main(int argc, char *argv[])
02 {
03 QApplication app(argc, argv);
04 MainWindow *mainWin = new MainWindow;
05 mainWin->show();
06 return app.exec();
07 }
При работе со многими окнами теперь имеет смысл создавать
Новый слот
01 void MainWindow::newFile()
02 {
03 MainWindow *mainWin = new MainWindow;
04 mainWin->show();
05 }
Мы просто создаем новый экземпляр
Действия 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 на необходимость удаления окна при его закрытии. Кроме