ΠΠ½ΠΎΠ³ΠΎΠ΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π² ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ ΠΈΠ»ΠΈ MDIβΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ. Π Qt MDIβΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΠΊΠ»Π°ΡΡΠ° QWorkspace ΠΈ ΠΏΡΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π² Π²ΠΈΠ΄Π΅ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΎΠΊΠ½Π° QWorkspace.
ΠΠ±ΡΡΠ½ΠΎ MDIβΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΏΡΠ½ΠΊΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Ρ Windows (ΠΎΠΊΠ½Π°) Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΏΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠΊΠ½Π°ΠΌΠΈ ΠΈ ΠΈΡ ΡΠΏΠΈΡΠΊΠΎΠΌ. ΠΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π³Π°Π»ΠΎΡΠΊΠΎΠΉ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π»ΡΠ±ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ, ΡΠ΅Π»ΠΊΠ°Ρ ΠΏΠΎ Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ Π² ΠΌΠ΅Π½Ρ Windows.
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Π΄Π»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ MDI ΠΈ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΅Π³ΠΎ ΠΌΠ΅Π½Ρ Windows ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ MDIβΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Editor (ΡΠ΅Π΄Π°ΠΊΡΠΎΡ), ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π½Π° ΡΠΈΡ. 6.16.
Π ΠΈΡ. 6.16. MDIβΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Editor.
ΠΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ²: MainWindow ΠΈ Editor. ΠΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ-Π΄ΠΈΡΠΊΠ΅, ΠΈ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ Π΅Π³ΠΎ Π»ΠΈΠ±ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ, Π»ΠΈΠ±ΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΠΈΠ· ΡΠ°ΡΡΠΈ I, Π·Π΄Π΅ΡΡ ΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄.
Π ΠΈΡ. 6.17. ΠΠ΅Π½Ρ MDIβΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Editor.
ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΠΊΠ»Π°ΡΡΠ° MainWindow.
01 MainWindow::MainWindow()
02 {
03 workspace = new QWorkspace;
04 setCentralWidget(workspace);
05 connect(workspace, SIGNAL(windowActivated(QWidget *)),
06 this, SLOT(updateMenus()));
07 createActions();
08 createMenus();
09 createToolBars();
10 createStatusBar();
11 setWindowTitle(tr("MDI Editor"));
12 setWindowIcon(QPixmap(":/images/icon.png"));
13 }
Π ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ MainWindow ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ QWorkspace ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ Π΅Π³ΠΎ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΡΠΌ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠΌ. ΠΡ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΠΈΠ³Π½Π°Π» windowActivated() ΠΊΠ»Π°ΡΡΠ° QWorkspace ΡΠΎ ΡΠ»ΠΎΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΌΠ΅Π½Ρ Window.
01 void MainWindow::newFile()
02 {
03 Editor *editor = createEditor();
04 editor->newFile();
05 editor->show();
06 }
Π‘Π»ΠΎΡ newFile() ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΏΡΠ½ΠΊΡΡ ΠΌΠ΅Π½Ρ File | New. ΠΠ½ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π·Π°ΠΊΡΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ createEditor(), ΡΠΎΠ·Π΄Π°ΡΡΠ΅ΠΉ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ Editor.
01 Editor *MainWindow::createEditor()
02 {
03 Editor *editor = new Editor;
04 connect(editor, SIGNAL(copyAvailable(bool)),
05 cutAction, SLOT(setEnabled(bool)));
06 connect(editor, SIGNAL(copyAvailable(bool)),
07 copyAction, SLOT(setEnabled(bool)));
08 workspace->addWindow(editor);
09 windowMenu->addAction(editor->windowMenuAction());
10 windowActionGroup->addAction(editor->windowMenuAction());
11 return editor;
12 }
Π€ΡΠ½ΠΊΡΠΈΡ createEditor() ΡΠΎΠ·Π΄Π°Π΅Ρ Π²ΠΈΠ΄ΠΆΠ΅Ρ Editor ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π΄Π²Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Β«ΡΠΈΠ³Π½Π°Π»βΡΠ»ΠΎΡΒ». ΠΡΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ½ΠΊΡΠΎΠ² ΠΌΠ΅Π½Ρ Edit | Cut ΠΈ Edit | Copy Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π½Π°Π»ΠΈΡΠΈΡ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠ΅ΠΊΡΡΠ°.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ MDI, ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ, ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ° Π±ΡΠ΄Π΅Ρ Π²Π΅ΡΡΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌΠΈ Editor. ΠΠ° ΡΡΠΎ Π½Π°Π΄ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Ρ Π² ΠΎΡΠ²Π΅ΡΠ΅ Π½Π° ΡΠΈΠ³Π½Π°Π» copyAvailable(bool), ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° Editor, Π½ΠΎ Π½Π΅ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΠΎΠΊΠΎΠ½. ΠΠΎ ΡΡΠΈ ΡΠΈΠ³Π½Π°Π»Ρ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ ΠΎΠΊΠ½ΠΎΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠΎΡΠ»Π΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Editor ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ QAction Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠΊΠ½Π° Π² ΠΌΠ΅Π½Ρ Window. ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠΌ Editor, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΊΠΎΡΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π² ΠΎΠ±ΡΠ΅ΠΊΡ QActionGroup. QActionGroup Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΡΡΡΠΎΠΊΠ° ΠΌΠ΅Π½Ρ Window.
01 void MainWindow::open()
02 {
03 Editor *editor = createEditor();
04 if (editor->open()) {
05 editor->show();
06 } else {
07 editor->close();
08 }
09 }
Π€ΡΠ½ΠΊΡΠΈΡ open() ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΏΡΠ½ΠΊΡΡ ΠΌΠ΅Π½Ρ File | Open. ΠΡΠΎΡ ΠΏΡΠ½ΠΊΡ ΠΌΠ΅Π½Ρ ΡΠΎΠ·Π΄Π°Π΅Ρ Editor Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ open() Π΄Π»Ρ Editor. ΠΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ Editor, Π° Π½Π΅ Π² ΠΊΠ»Π°ΡΡΠ΅ MainWindow, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Editor ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ.
ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ open() Π·Π°Π²Π΅ΡΡΠΈΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ΅ΠΉ, ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΊΡΠΎΠ΅ΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅. ΠΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°Π½Ρ ΡΠ°ΠΌΠΈ ΡΠ²Π½ΠΎ ΡΠ΄Π°Π»ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Editor; ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π°ΡΡΠΈΠ±ΡΡΠ° Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° Qt::WA_DeleteOnClose, ΡΡΠΎ ΠΈ Π΄Π΅Π»Π°Π΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ Editor.
01 void MainWindow::save()
02 {
03 if (activeEditor()) {
04 activeEditor()->save();
05 }
06 }
Π‘Π»ΠΎΡ save() Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Editor::save() Π΄Π»Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°, Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ²ΠΎΠΉ ΠΈΠΌΠ΅Π΅ΡΡΡ. Π ΡΠ½ΠΎΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ Editor.
01 Editor *MainWindow::activeEditor()
02 {
03 return qobject_cast<Editor *>(workspace->activeWindow());
04 }
ΠΠ°ΠΊΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ activeEditor() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π΅ ΠΎΠΊΠ½ΠΎ Π² Π²ΠΈΠ΄Π΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠΈΠΏΠ° Editor ΠΈΠ»ΠΈ Π½ΡΠ»Π΅Π²ΠΎΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.
01 void MainWindow::cut()
02 {
03 if (activeEditor())
04 activeEditor()->cut();
05 }
Π‘Π»ΠΎΡ cut() Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Editor::cut() Π΄Π»Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°. ΠΡ Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌ ΡΠ»ΠΎΡΡ copy(), paste() ΠΈ del(), ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ Π²ΠΈΠ΄.
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 }
Π‘Π»ΠΎΡ updateMenus() Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠΊΠ½ΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ (ΠΈ ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΎΠΊΠ½ΠΎ) Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠ΅Π½Ρ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠΌΡ Π½Π°ΠΌΠΈ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ MainWindow ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Β«ΡΠΈΠ³Π½Π°Π»βΡΠ»ΠΎΡΒ».
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠ½ΠΊΡΠΎΠ² ΠΌΠ΅Π½Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΏΡΠΈ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΈΡ ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. Π ΠΊΠΎΠ½ΡΠ΅ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ setChecked() Π΄Π»Ρ QAction, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ QActionGroup Π½Π°ΠΌ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ²Π½ΠΎ ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ ΡΠ»Π°ΠΆΠΎΠΊ ΠΏΡΠ΅Π΄ΡΡΡΡΠ΅Π³ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.
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);
08 windowMenu->addAction(cascadeAction);
09 windowMenu->addSeparator();
10 windowMenu->addAction(nextAction);
11 windowMenu->addAction(previousAction);
12 windowMenu->addAction(separatorAction);
13 }
ΠΠ°ΠΊΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ createMenus() Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΌΠ΅Π½Ρ Window ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ. ΠΠ΄Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΈΠΏΠΈΡΠ½ΡΠ΅ Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΈ ΠΎΠ½ΠΈ Π»Π΅Π³ΠΊΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ»ΠΎΡΠΎΠ² closeActiveWindow(), closeAllWindows(), tile() ΠΈ cascade() ΠΊΠ»Π°ΡΡΠ° QWorkspace. ΠΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π² ΠΌΠ΅Π½Ρ Window Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ. (ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ createEditor(), ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π²ΠΈΠ΄Π΅Π»ΠΈ.) ΠΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΎΠΊΠ½Π° ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π΅ΠΌΡ ΠΏΡΠ½ΠΊΡ Π² ΠΌΠ΅Π½Ρ Window ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΅Π³ΠΎ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΎ ΠΎΠΊΠ½ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°), Ρ.Π΅. ΠΏΡΠ½ΠΊΡ ΠΌΠ΅Π½Ρ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈΠ· ΠΌΠ΅Π½Ρ Window Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
01 void MainWindow::closeEvent(QCloseEvent *event)
02 {
03 workspace->closeAllWindows();
04 if (activeEditor()) {
05 event->ignore();
06 } else {
07 event->accept();
08 }
09 }
Π€ΡΠ½ΠΊΡΠΈΡ closeEvent() ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π΄Π»Ρ Π·Π°ΠΊΡΡΡΠΈΡ Π²ΡΠ΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΎΠΊΠΎΠ½, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠΈ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌΠΈ ΡΠΈΠ³Π½Π°Π»Π° ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΡ Π·Π°ΠΊΡΡΡΠΈΡ. ΠΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² Β«ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΒ» ΡΠ²ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ Π·Π°ΠΊΡΡΡΠΈΡ (ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠ°Π» ΠΊΠ½ΠΎΠΏΠΊΡ ΠΎΡΠΌΠ΅Π½Ρ ΠΏΡΠΈ Π²ΡΠ΄Π°ΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ Β«Π½Π΅ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ Β»), ΠΌΡ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅ Π·Π°ΠΊΡΡΡΠΈΡ Π΄Π»Ρ MainWindow; Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ Π΅Π³ΠΎ, ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Qt Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΠΎΠΊΠ½ΠΎ. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ closeEvent() Π² MainWindow, Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π±ΡΠ»ΠΎ Π±Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½Π΅ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.