Вход/Регистрация
QT 4: программирование GUI на С++
вернуться

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

Шрифт:

Создание действий Open (открыть), Save (сохранить) и Save As (сохранить как) очень похоже на создание действия New, поэтому мы сразу переходим к строке «recently opened files» (недавно открытые файлы) меню File:

09 for (int i = 0; i < MaxRecentFiles; ++i)

10 {

11 recentFileActions[i] = new QAction(this);

12 recentFileActions[i]->setVisible(false);

13 connect(recentFileActions[i], SIGNAL(triggered),

14 this, SLOT(openRecentFile));

15 }

Мы заполняем действиями массив recentFileActions. Каждое действие скрыто и подключается к слоту openRecentFile. Далее мы покажем, как действия в списке недавно используемых файлов сделать видимыми, чтобы можно было ими воспользоваться.

Теперь перейдем к действию Select All (выделить все):

16 selectAllAction = new QAction(tr("&All"), this);

17 selectAllAction->setShortcut(tr("Ctrl+A"));

18 selectAllAction->setStatusTip(tr("Select all the cells in the spreadsheet"));

19 connect(selectAllAction, SIGNAL(triggered),

20 spreadsheet, SLOT(selectAll));

Слот selectAll обеспечивается в QAbstractItemView, который является одним из базовых классов QTableWidget, поэтому нам самим не надо его реализовывать.

Давайте теперь перейдем к действию Show Grid (показать сетку) из меню Options (опции):

21 showGridAction = new QAction(tr("&Show Grid"), this);

22 showGridAction->setCheckable(true);

23 showGridAction->setChecked(spreadsheet->showGrid);

24 showGridAction->setStatusTip(tr("Show or hide the spreadsheet's grid"));

25 connect(showGridAction, SIGNAL(toggled(bool)),

26 spreadsheet, SLOT(setShowGrid(bool)));

Действие Show Grid является включаемым. Оно имеет маркер флажка в меню и реализуется как кнопка—переключатель на панели инструментов. Когда это действие включено, на компоненте Spreadsheet отображается сетка. При запуске приложения мы инициализируем это действие в соответствии со значениями, которые принимаются по умолчанию компонентом Spreadsheet, и поэтому работа этого переключателя будет с самого начала синхронизирована. Затем мы соединяем сигнал toggled(bool) действия Show Grid со слотом setShowGrid(bool) компонента Spreadsheet, который наследуется от QTableWidget. После добавления этого действия к меню или панели инструментов пользователь сможет включать и выключать сетку.

Действия—переключатели Show Grid и Auto—Recalculate (автопересчет) работают независимо. Кроме того, Qt обеспечивает возможность определения взаимоисключающих действий путем применения своего собственного класса QActionGroup.

27 aboutQtAction = new QAction(tr("About &Qt"), this);

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.

  • Читать дальше
  • 1
  • ...
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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