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



>28 aboutQtAction->setStatusTip(tr("Show the Qt library's About box"));

>29 connect(aboutQtAction, SIGNAL(triggered()),

>30 qApp, SLOT(aboutQt()));

>31 }

Для действия About Qt (справка по средствам разработки Qt) мы используем слот aboutQt() объекта QApplication, который доступен через глобальную переменную qApp.

Рис. 3.4. Диалоговое окно About Qt.

Действия нами созданы, и теперь мы можем перейти к построению системы меню с этими действиями.

>01 void MainWindow::createMenus()

>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 (правка) включается подменю. Это подменю (как и меню, к которому оно принадлежит) является экземпляром класса