QT 4: программирование GUI на С++
Шрифт:
Действие Show Grid является включаемым. Оно имеет маркер флажка в меню и реализуется как кнопка—переключатель на панели инструментов. Когда это действие включено, на компоненте Spreadsheet отображается сетка. При запуске приложения
Действия—переключатели Show Grid и Auto—Recalculate (автопересчет) работают независимо. Кроме того, Qt обеспечивает возможность определения взаимоисключающих действий путем применения своего собственного класса QActionGroup.
Для действия About Qt (справка по средствам разработки Qt) мы используем слот aboutQt объекта QApplication, который доступен через глобальную переменную qApp.
Рис. 3.4. Диалоговое окно About Qt.
Действия нами созданы, и теперь мы можем перейти к построению системы меню с этими действиями.
В Qt все меню являются экземплярами класса QMenu. Функция addMenu создает виджет QMenu с заданным текстом и добавляет его в строку меню. Функция QMainWindow::menuBar возвращает указатель на QMenuBar. Строка меню создается при первом вызове menuBar.
Сначала мы создаем меню File (файл) и затем добавляем к нему действия New, Open, Save и Save As (создать, открыть, сохранить и сохранить как). Мы вставляем разделитель для визуального выделения группы взаимосвязанных пунктов меню. Мы используем цикл for для добавления (первоначально скрытых) действий из массива recentFileActions, а в конце добавляем действие exitAction.
Мы сохранили указатель на один из разделителей. Это позволяет нам скрывать этот разделитель (если файлы не использовались) или показывать его,
поскольку мы не хотим отображать два разделителя, когда между ними ничего нет.В меню Edit (правка) включается подменю. Это подменю (как и меню, к которому оно принадлежит) является экземпляром класса QPopupMenu. Мы просто создаем подменю путем указания this в качестве его родителя и вставляем его в то место меню Edit, где мы собираемся его расположить.
Теперь мы создаем меню Edit (правка), добавляя действия при помощи QMenu::addAction, как мы это делали для меню File, и добавляя подменю в нужную позицию при помощи QMenu::addMenu. Подменю, как и меню, к которому оно относится, имеет тип QMenu.
Подобным же образом мы создаем меню Tools, Options и Help (инструменты, опции и помощь). Мы вставляем разделитель между меню Options и Help. В системах Motif и CDE этот разделитель сдвигает меню Help вправо; в других случаях этот разделитель игнорируется.
Рис. 3.5. Полоса главного меню в стилях систем Motif и Windows.
Любой виджет в Qt может иметь связанный с ним список действий QAction. Для обеспечения в приложении контекстного меню мы добавляем необходимые нам действия в виджет Spreadsheet и устанавливаем политику контекстного меню виджета на отображение контекстного меню с этими действиями. Контекстные меню вызываются при щелчке правой клавишей мышки по виджету или при нажатии специальной клавиши клавиатуры, зависящей от платформы.