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

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

Жанры

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

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

Шрифт:

12 settings.beginGroup("mainWindow");

13 resize(settings.value("size").toSize);

14 restoreState(settings.value("state").toByteArray);

15 settings.endGroup;

16 }

Наконец, QMainWindow обеспечивает контекстное меню, в котором представлены все прикрепляемые окна и панели инструментов. Используя это меню, пользователь может закрывать и восстанавливать прикрепляемые окна и панели инструментов.

Рис. 6.15.

Контекстное меню QMainWindow.

Многодокументный интерфейс

Приложения, которые обеспечивают работу со многими документами в центральной области главного окна, называются приложениями с многодокументным интерфейсом или 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 требует поддержки своего собственного состояния.

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

Отмороженный 8.0

Гарцевич Евгений Александрович
8. Отмороженный
Фантастика:
постапокалипсис
рпг
аниме
5.00
рейтинг книги
Отмороженный 8.0

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

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

Ермак. Телохранитель

Валериев Игорь
2. Ермак
Фантастика:
альтернативная история
7.00
рейтинг книги
Ермак. Телохранитель

Матабар IV

Клеванский Кирилл Сергеевич
4. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар IV

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

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

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

Дочь моего друга

Тоцка Тала
2. Айдаровы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Дочь моего друга

Свет Черной Звезды

Звездная Елена
6. Катриона
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Свет Черной Звезды

Кодекс Крови. Книга IV

Борзых М.
4. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IV

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

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

Попаданка в академии драконов 4

Свадьбина Любовь
4. Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
7.47
рейтинг книги
Попаданка в академии драконов 4

Сердце Дракона. Том 12

Клеванский Кирилл Сергеевич
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Сердце Дракона. Том 12

Лолита

Набоков Владимир Владимирович
Проза:
классическая проза
современная проза
8.05
рейтинг книги
Лолита

Сводный гад

Рам Янка
2. Самбисты
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Сводный гад