Чтение онлайн

на главную - закладки

Жанры

QT 4: программирование GUI на С++

Саммерфилд Марк

Шрифт:

02 {

03 fileMenu = menuBar->addMenu(tr("&File"));

04 fileMenu->addAction(newAction);

05 fileMenu->addAction(openAction);

06 fileMenu->addAction(saveAction);

07 fileMenu->addAction(saveAsAction);

08 separatorAction = fileMenu->addSeparator;

09 for (int i = 0; i < MaxRecentFiles; ++i)

10 fileMenu->addAction(recentFileActions[i]);

11 fileMenu->addSeparator;

12 fileMenu->addAction(exitAction);

В Qt все меню являются экземплярами класса QMenu. Функция addMenu создает виджет QMenu с заданным текстом и добавляет его в строку меню. Функция QMainWindow::menuBar возвращает указатель на QMenuBar. Строка меню создается при первом вызове menuBar.

Сначала мы создаем меню File (файл) и затем добавляем к нему действия New, Open, Save и Save As (создать, открыть, сохранить и сохранить как). Мы вставляем разделитель для визуального выделения группы взаимосвязанных пунктов меню. Мы используем цикл for для добавления (первоначально скрытых) действий из массива recentFileActions, а в конце добавляем действие exitAction.

Мы сохранили указатель на один из разделителей. Это позволяет нам скрывать этот разделитель (если файлы не использовались) или показывать его, поскольку мы не хотим отображать два разделителя, когда между ними ничего нет.

13 editMenu = menuBar->addMenu(tr("&Edit"));

14 editMenu->addAction(cutAction);

15 editMenu->addAction(copyAction);

16 editMenu->addAction(pasteAction);

17 editMenu->addAction(deleteAction);

18 selectSubMenu = editMenu->addMenu(tr("&Select"));

19 selectSubMenu->addAction(selectRowAction);

20 selectSubMenu->addAction(selectColumnAction);

21 selectSubMenu->addAction(selectAllAction);

22 editMenu->addSeparator;

23 editMenu->addAction(findAction);

24 editMenu->addAction(goToCellAction);

В меню Edit (правка) включается подменю. Это подменю (как и меню, к которому оно принадлежит) является экземпляром класса QPopupMenu. Мы просто создаем подменю путем указания this в качестве его родителя и вставляем его в то место меню Edit, где мы собираемся его расположить.

Теперь мы создаем меню Edit (правка), добавляя действия при помощи QMenu::addAction, как мы это делали для меню File, и добавляя подменю в нужную позицию при помощи QMenu::addMenu. Подменю, как и меню, к которому оно относится, имеет тип QMenu.

25 toolsMenu = menuBar->addMenu(tr("&Tools"));

26 toolsMenu->addAction(recalculateAction);

27 toolsMenu->addAction(sortAction);

28 optionsMenu = menuBar->addMenu(tr("&Options"));

29 optionsMenu->addAction(showGridAction);

30 optionsMenu->addAction(autoRecalcAction);

31 menuBar->addSeparator;

32 helpMenu = menuBar->addMenu(tr("&Help"));

33 helpMenu->addAction(aboutAction);

34 helpMenu->addAction(aboutQtAction);

35 }

Подобным же образом мы создаем меню Tools, Options и Help (инструменты, опции и помощь). Мы вставляем разделитель между меню Options и Help. В системах Motif и CDE этот разделитель сдвигает меню Help вправо; в других случаях этот разделитель игнорируется.

Рис. 3.5. Полоса главного меню в стилях систем Motif и Windows.

01 void MainWindow::createContextMenu

02 {

03 spreadsheet->addAction(copyAction);

04 spreadsheet->addAction(pasteAction);

05 spreadsheet->addAction(cutAction);

06 spreadsheet->setContextMenuPolicy(Qt::ActionsContextMenu);

07 }

Любой виджет в Qt может иметь связанный с ним список действий QAction. Для обеспечения в приложении контекстного меню мы добавляем необходимые нам действия в виджет Spreadsheet и устанавливаем политику контекстного меню виджета на отображение контекстного меню с этими действиями. Контекстные меню вызываются при щелчке правой клавишей мышки по виджету или при нажатии специальной клавиши клавиатуры, зависящей от платформы.

Рис. 3.6. Контекстное меню приложения Электронная таблица.

Более сложный способ обеспечения контекстного меню заключается в переопределении функции QWidget::contextMenuEvent, создании виджета QMenu, заполнении его требуемыми действиями и вызове для него функции exec.

01 void Mainwindow::createToolBars

02 {

03 fileToolBar = addToolBar(tr("&File"));

04 fileToolBar->addAction(newAction);

05 fileToolBar->addAction(openAction);

06 fileToolBar->addAction(saveAction);

07 editToolBar = addToolBar(tr("&Edif));

08 editToolBar->addAction(cutAction);

09 editToolBar->addAction(copyAction);

10 editToolBar->addAction(pasteAction);

11 editToolBar->addSeparator;

12 editToolBar->addAction(findAction);

Поделиться:
Популярные книги

Шатун. Лесной гамбит

Трофимов Ерофей
2. Шатун
Фантастика:
боевая фантастика
7.43
рейтинг книги
Шатун. Лесной гамбит

Газлайтер. Том 21

Володин Григорий Григорьевич
21. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
5.25
рейтинг книги
Газлайтер. Том 21

Черный Маг Императора 10

Герда Александр
10. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 10

Имперец. Том 1 и Том 2

Романов Михаил Яковлевич
1. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Имперец. Том 1 и Том 2

На границе империй. Том 3

INDIGO
3. Фортуна дама переменчивая
Фантастика:
космическая фантастика
5.63
рейтинг книги
На границе империй. Том 3

Неучтенный элемент. Том 3

NikL
3. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 3

Воронцов. Перезагрузка. Книга 5

Тарасов Ник
5. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 5

Идеальный мир для Лекаря 2

Сапфир Олег
2. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 2

Адепт. Том 1. Обучение

Бубела Олег Николаевич
6. Совсем не герой
Фантастика:
фэнтези
9.27
рейтинг книги
Адепт. Том 1. Обучение

Бояръ-Аниме. Газлайтер. Том 33

Володин Григорий Григорьевич
33. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
6.25
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 33

Последний Паладин. Том 14

Саваровский Роман
14. Путь Паладина
Фантастика:
аниме
фэнтези
попаданцы
5.75
рейтинг книги
Последний Паладин. Том 14

Аномальный наследник. Пенталогия

Тарс Элиан
Аномальный наследник
Фантастика:
фэнтези
6.70
рейтинг книги
Аномальный наследник. Пенталогия

Роза ветров

Кас Маркус
6. Артефактор
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Роза ветров

Кодекс Охотника XXVIII

Винокуров Юрий
28. Кодекс Охотника
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника XXVIII