QT 4: программирование GUI на С++
Шрифт:
В конструкторе мы начинаем создание виджета Электронная таблица Spreadsheet и определяем его в качестве центрального виджета главного окна. Центральный виджет занимает среднюю часть главного окна (см. рис. 3.2). Класс Spreadsheet является подклассом QTableWidget, который обладает некоторыми возможностями электронной таблицы: например, он поддерживает формулы электронной таблицы. Реализацию этого класса мы рассмотрим в главе 4 .
Рис. 3.2. Области главного окна QMainWindow.
Мы вызываем закрытые
Мы инициализируем указатель findDialog в нулевое значение, а при первом вызове MainWindow::find мы создадим объект FindDialog. B конце конструктора в качестве пиктограммы окна мы задаем PNG—файл: icon.png. Qt поддерживает многие форматы графических файлов, включая BMP, GIF [4] , JPEG, PNG, PNM, XBM и XPM. Функция QWidget::setWindowIcon устанавливает пиктограмму в левый верхний угол окна. К сожалению, не существует независимого от платформы способа установки пиктограммы приложения, отображаемого на рабочем столе компьютера. Описание этой процедуры для различных платформ можно найти в сети Интернет по адресу http://doc.trolltech.com/4.1/appicon.html.
4
Если вы находитесь в стране, которая признает патенты на программное обеспечение и где компания Unisys обладает патентом на LZW—распаковку, вам, возможно, потребуется лицензия от компании Unisys на право применения ее технологии работы с файлами GIF. По этой причине поддержка файлов GIF по умолчанию отключена в Qt. Мы надеемся, что срок действия ограничений этой лицензии истечет к концу 2004 года. GIF support is disabled in Qt by default because the decompression algorithm used by GIF files was patented in some countries where software patents are recognized. We believe that this patent has now expired worldwide. To enable GIF support in Qt, pass the —qt—gif command—line option to the configure script or set the appropriate option in the Qt installer.
В приложениях с графическим пользовательским интерфейсом обычно используется много изображений. Существует много различных методов, предназначенных для работы приложения с изображениями. Наиболее распространенными являются:
• хранение изображений в файлах и загрузка их во время выполнения приложения;
• включение файлов XPM в исходный код программы; это возможно, поскольку файлы XPM являются совместимыми с файлами исходного кода С++);
• использование механизма определения ресурсов, предусмотренного в Qt.
Мы используем здесь механизм определения ресурсов, поскольку он более удобен, чем загрузка файлов во время выполнения приложения, и он работает со всеми поддерживаемыми форматами графических файлов. Мы храним изображения в подкаталоге images исходного дерева.
Для применения системы ресурсов Qt мы должны создать файл ресурсов и добавить в файл .pro строку, которая задает этот файл ресурсов. В нашем примере мы назвали файл ресурсов spreadsheet.qrc, поэтому в файл .pro мы добавляем следующую строку:
Сам файл ресурсов имеет простой XML—формат. Ниже показан фрагмент из используемого нами файла ресурсов:
Файлы ресурсов после компиляции входят в состав исполняемого модуля приложения, поэтому они не могут теряться. При ссылке на ресурсы мы используемпрефикс пути :/ (двоеточие и слеш), и именно поэтому пиктограмма задается как :/images/icon.png. Ресурсами могут быть любые файлы (не только изображения), и мы можем их использовать в большинстве случаев, когда в Qt ожидается применение
имени файла. Они более подробно рассматриваются в гл. 12.Создание меню и панелей инструментов
Большинство современных приложений с графическим пользовательским интерфейсом содержат меню, контекстное меню и панели инструментов. Меню позволяют пользователям исследовать возможности приложения и узнать новые способы работы, а контекстные меню и панели инструментов обеспечивают быстрый доступ к часто используемым функциям.
Рис. 3.3. Меню приложения Электронная таблица.
Использование понятия «действия» упрощает программирование меню и панелей инструментов при помощи средств разработки Qt. Элемент action (действие) можно добавлять к любому количеству меню и панелей инструментов. Создание в Qt меню и панелей инструментов разбивается на следующие этапы:
• создание и настройка действий;
• создание меню и добавление к ним действий;
• создание панелей инструментов и добавление к ним действий.
В приложении Электронная таблица действия создаются в createActions:
Действие New (создать) имеет клавишу быстрого выбора пункта меню (New) [5] , родительское окно (главное окно), пиктограмму (new.png), клавишу быстрого вызова команды (Ctrl+N) и сообщение в строке состояния. Мы подсоединяем к сигналу этого действия triggered закрытый слот главного окна newFile; этот слот мы реализуем в следующем разделе. Это соединение гарантирует, что при выборе пользователем пункта меню File | New (файл | создать), при нажатии им кнопки New на панели инструментов или при нажатии клавиш Ctrl+N будет вызван слот newFile.
5
Подчеркнутый символ в пункте меню означает, что этот пункт можно выбрать в активном меню, нажав клавиатурную комбинацию «Alt» + «подчеркнутый символ». — Примеч. науч. ред.
Создание действий Open (открыть), Save (сохранить) и Save As (сохранить как) очень похоже на создание действия New, поэтому мы сразу переходим к строке «recently opened files» (недавно открытые файлы) меню File:
Мы заполняем действиями массив recentFileActions. Каждое действие скрыто и подключается к слоту openRecentFile. Далее мы покажем, как действия в списке недавно используемых файлов сделать видимыми, чтобы можно было ими воспользоваться.
Теперь перейдем к действию Select All (выделить все):
Слот selectAll обеспечивается в QAbstractItemView, который является одним из базовых классов QTableWidget, поэтому нам самим не надо его реализовывать.
Давайте теперь перейдем к действию Show Grid (показать сетку) из меню Options (опции):