Жасмин Бланшет - QT 4: программирование GUI на С++ Страница 14
- Категория: Компьютеры и Интернет / Программирование
- Автор: Жасмин Бланшет
- Год выпуска: -
- ISBN: -
- Издательство: -
- Страниц: 123
- Добавлено: 2019-05-29 11:13:56
Жасмин Бланшет - QT 4: программирование GUI на С++ краткое содержание
Прочтите описание перед тем, как прочитать онлайн книгу «Жасмин Бланшет - QT 4: программирование GUI на С++» бесплатно полную версию:Единственное официальное руководстро по практическому программированию в среде Qt 4.1.Применяя средства разработки Qt компании «Trolltech», вы сможете создавать на С++ промышленные приложения, которые естественно работают в средах Windows, Linux/UNIX, Linux для встроенных систем без изменения программного кода и Mac Os X. Книга написана сотрудниками компании «Trolltech». Она представляет собой практическое руководство по успешному применению самой мощной из всех созданных до сих пор версий Qt — Qt 4.1.Из книги «Qt 4: программирование GUI на С++» вы узнаете о наиболее эффективных приемах и методах программирования с применением Qt 4 и овладеете ключевыми технологиями в самых различных областях — от архитектуры Qt модель/представление до мощного графического процессора 2D. Авторы вооружают читателей беспрецедентно глубокими знаниями модели событий и системы компоновки Qt.На реалистических примерах они описывают высокоэффективные методы во всех областях — от разработки основных элементов графического пользовательского интерфейса до передовых методов интеграции с базой данных и XML. Каждая глава содержит полностью обновленный материал.Данное издание:• Включает новые главы по архитектуре Qt 4 модель/представление и поддержке подключаемых модулей Qt, а также краткое введение в программирование встроенных систем на платформе Qtopia.• Раскрывает все основные принципы программирования в среде Qt — от создания диалоговых и других окон до реализации функциональности приложений.• Знакомит с передовыми методами управления компоновкой виджетов и обработкой событий.• Показывает, как можно с наибольшей эффективностью использовать новые программные интерфейсы Qt 4, в частности мощный графический процессор 2D и новые простые в применении классы—контейнеры.• Представляет передовые методы Qt 4, которых нет ни в одной книге: от создания подключаемых модулей, расширяющих возможности Qt, и приложений, до применения «родных» для конкретной платформы программных интерфейсов.• Содержит приложение с подробным введением в программирование на С++ в среде Qt для опытных Java—разработчиков.Жасмин Бланшет (Jasmine Blanchette) — менеджер по документированию и старший разработчик компании «Trolltech» с 2001 года. Он является редактором «Qt Quarterly», информационного бюллетеня компании «Trolltech», и соавтором книги «Qt 3: программирование GUI на С++».Марк Саммерфилд (Mark Summerfield) — независимый преподаватель и консультант по С++, Qt и Python. Он работал менеджером по документированию в компании «Trolltech» на протяжении трех лет. Марк является соавтором книги «Qt 3: программирование GUI на С++».
Жасмин Бланшет - QT 4: программирование GUI на С++ читать онлайн бесплатно
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.
Мы сохранили указатель на один из разделителей. Это позволяет нам скрывать этот разделитель (если файлы не использовались) или показывать его, поскольку мы не хотим отображать два разделителя, когда между ними ничего нет.
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 (правка) включается подменю. Это подменю (как и меню, к которому оно принадлежит) является экземпляром класса QPopupMenu. Мы просто создаем подменю путем указания this в качестве его родителя и вставляем его в то место меню Edit, где мы собираемся его расположить.
Теперь мы создаем меню Edit (правка), добавляя действия при помощи QMenu::addAction(), как мы это делали для меню File, и добавляя подменю в нужную позицию при помощи QMenu::addMenu(). Подменю, как и меню, к которому оно относится, имеет тип QMenu.
25 toolsMenu = menuBar()->addMenu(tr("&Tools"));
26 toolsMenu->addAction(recalculateAction);
27 toolsMenu->addAction(sortAction);
28 optionsMenu = menuBar()->addMenu(tr("&Options"));
29 optionsMenu->addAction(showGridAction);
30 optionsMenu->addAction(autoRecalcAction);
31 menuBar()->addSeparator();
32 helpMenu = menuBar()->addMenu(tr("&Help"));
33 helpMenu->addAction(aboutAction);
34 helpMenu->addAction(aboutQtAction);
35 }
Подобным же образом мы создаем меню Tools, Options и Help (инструменты, опции и помощь). Мы вставляем разделитель между меню Options и Help. В системах Motif и CDE этот разделитель сдвигает меню Help вправо; в других случаях этот разделитель игнорируется.
Рис. 3.5. Полоса главного меню в стилях систем Motif и Windows.
01 void MainWindow::createContextMenu()
02 {
03 spreadsheet->addAction(copyAction);
04 spreadsheet->addAction(pasteAction);
05 spreadsheet->addAction(cutAction);
06 spreadsheet->setContextMenuPolicy(Qt::ActionsContextMenu);
07 }
Любой виджет в Qt может иметь связанный с ним список действий QAction. Для обеспечения в приложении контекстного меню мы добавляем необходимые нам действия в виджет Spreadsheet и устанавливаем политику контекстного меню виджета на отображение контекстного меню с этими действиями. Контекстные меню вызываются при щелчке правой клавишей мышки по виджету или при нажатии специальной клавиши клавиатуры, зависящей от платформы.
Рис. 3.6. Контекстное меню приложения Электронная таблица.
Более сложный способ обеспечения контекстного меню заключается в переопределении функции QWidget::contextMenuEvent(), создании виджета QMenu, заполнении его требуемыми действиями и вызове для него функции exec().
01 void Mainwindow::createToolBars()
02 {
03 fileToolBar = addToolBar(tr("&File"));
04 fileToolBar->addAction(newAction);
05 fileToolBar->addAction(openAction);
06 fileToolBar->addAction(saveAction);
07 editToolBar = addToolBar(tr("&Edif));
08 editToolBar->addAction(cutAction);
09 editToolBar->addAction(copyAction);
10 editToolBar->addAction(pasteAction);
11 editToolBar->addSeparator();
12 editToolBar->addAction(findAction);
13 editToolBar->addAction(goToCellAction);
14 }
Создание панелей инструментов очень похоже на создание меню. Мы создаем панель инструментов File и панель инструментов Edit. Как и меню, панель инструментов может иметь разделители.
Рис. 3.7. Панели инструментов приложения Электронная таблица.
Создание и настройка строки состояния
После создания меню и панелей инструментов мы готовы приступить к созданию строки состояния приложения Электронная таблица.
Обычно строка состояния содержит два индикатора: положение текущей ячейки и формулу текущей ячейки. Полоса состояния также используется для вывода подсказок и других временных сообщений.
Для создания строки состояния в конструкторе MainWindow вызывается функция createStatusBar():
01 void MainWindow::createStatusBar()
02 {
03 locationLabel = new QLabel(" W999 ");
04 locationLabel->setAlignment(Qt::AlignHCenter);
05 locationLabel->setMinimumSize(locationLabel->sizeHint());
06 formulaLabel = new QLabel;
07 formulaLabel->setIndent(3);
08 statusBar()->addWidget(locationLabel);
09 statusBar()->addWidget(formulaLabel, 1);
10 connect(spreadsheet, SIGNAL(currentCellChanged(int, int, int, int)),
11 this, SLOT(updateStatusBar()));
12 connect(spreadsheet, SIGNAL(modified()),
13 this, SLOT(spreadsheetModified()));
14 updateStatusBar();
Жалоба
Напишите нам, и мы в срочном порядке примем меры.