QT 4: программирование GUI на С++ | страница 46



Мы просто создаем подменю путем указания 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);