QT 4: программирование GUI на С++
Шрифт:
Функция readSettings
Qt содержит функцию QWidget::setGeometry, которая дополняет функцию QWidget:: geometry, однако они не всегда работают должным образом в системе X11 из-за ограничений многих оконных менеджеров. По этой причине мы используем вместо них функции move и resize. (Подробную информацию по тому вопросу можно найти по адресу
Весь программный код MainWindow, относящийся к объектам QSettings, мы разместили в функциях readSettings и writeSettings; такой подход лишь один из возможных. Объект QSettings может создаваться для запроса или модификации каких-нибудь настроек в любой момент во время выполнения приложения и из любого места программы.
Теперь мы завершили построение главного окна MainWindow приложения Электронная таблица. В следующих разделах мы рассмотрим возможность модификации приложения Электронная таблица для обеспечения работы со многими документами и реализации экранных заставок. Мы завершим реализацию этих функций, в том числе обеспечивающих обработку формул и сортировку, в следующей главе.
Работа со многими документами
Теперь мы готовы написать функцию main приложения Электронная таблица:
Данная функция main немного отличается от написанных ранее: мы создали экземпляр MainWindow в виде переменной стека, а не использовали оператор new. Экземпляр MainWindow будет автоматически уничтожен после завершения функции.
При применении данной функции main
приложение Электронная таблица обеспечивает вывод на экран только одного главного окна и позволяет работать только с одним документом. Если мы хотим одновременно редактировать несколько документов, нам придется запускать несколько приложений Электронная таблица. Но это будет не так удобно, как если бы один экземпляр приложения обеспечивал вывод на экран многих главных окон, подобно тому как один экземпляр веб-браузера позволяет просматривать одновременно несколько окон.Мы модифицируем приложение Электронная таблица для обеспечения возможности работы со многими документами. Для начала нам потребуется немного видоизменить меню File:
• пункт меню File | New создает новое главное окно с пустым документом вместо повторного использования существующего главного окна;
• пункт меню File | Close закрывает текущее главное окно;
• пункт меню File | Exit закрывает все окна.
Рис. 3.16. Новое меню File.
В первоначальной версии меню File не было пункта Close (закрыть), поскольку он выполнял бы ту же функцию, что и пункт меню Exit. Новая функция main примет следующий вид:
При работе со многими окнами теперь имеет смысл создавать MainWindow оператором new, потому что затем мы можем использовать оператор delete для удаления главного окна после завершения работы с ним с целью экономии памяти.
Новый слот MainWindow::newFile будет выглядеть следующим образом:
Мы просто создаем новый экземпляр MainWindow. Может показаться странным, что мы нигде не сохраняем указатель на новое окно, но это не составит проблемы, поскольку Qt отслеживает все окна.
Действия Close и Exit будут задаваться следующим образом: