После настройки
01 void MainWindow::open
02 {
03 Editor *editor = createEditor;
04 if (editor->open) {
05 editor->show;
06 } else {
07 editor->close;
08 }
09 }
Функция
Если функция
01 void MainWindow::save
02 {
03 if (activeEditor) {
04 activeEditor->save;
05 }
06 }
Слот
01 Editor *MainWindow::activeEditor
02 {
03 return qobject_cast
04 }
Закрытая функция
01 void MainWindow::cut
02 {
03 if (activeEditor)
04 activeEditor->cut;
05 }
Слот
01 void MainWindow::updateMenus
02 {
03 bool hasEditor = (activeEditor != 0);
04 bool hasSelection = activeEditor
05 && activeEditor->textCursor.hasSelection;
06 saveAction->setEnabled(hasEditor);
07 saveAsAction->setEnabled(hasEditor);
08 pasteAction->setEnabled(hasEditor);
09 cutAction->setEnabled(hasSelection);
10 copyAction->setEnabled(hasSelection);
11 closeAction->setEnabled(hasEditor);
12 closeAllAction->setEnabled(hasEditor);
13 tileAction->setEnabled(hasEditor);
14 cascadeAction->setEnabled(hasEditor);
15 nextAction->setEnabled(hasEditor);
16 previousAction->setEnabled(hasEditor);
17 separatorAction->setVisible (hasEditor);
18 if (activeEditor)
19 activeEditor->windowMenuAction->setChecked(true);
20 }
Слот
Большинство пунктов меню имеет смысл при существовании активного окна, поэтому мы их отключаем при отсутствии активного окна. В конце мы вызываем
01 void MainWindow::createMenus
02 {
03 windowMenu = menuBar->addMenu(tr("&Window"));
04 windowMenu->addAction(closeAction);
05 windowMenu->addAction(closeAllAction);
06 windowMenu->addSeparator;
07 windowMenu->addAction(tileAction);