Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование на С++ в среде разработки Qt Creator. Учебно-методическое пособие
.pdf
81
Задание 3. Построение графика функции
В Qt Creator имеются встроенные средства для отображения данных в
виде простых и интерактивных графиков, сплайнов, круговых, столбчатых,
точечных диаграмм. Эти возможности реализуются модулем Charts. Модуль
Data Visualization позволяет строить трехмерные графики.
Построим двухмерный график функции cos(x). Вначале в файл проекта (с
расширением .pro) необходимо добавить поддержку графического модуля. В
списке файлов проекта найдите файл Form2.pro и откройте его. Допишите
строку charts.
Рисунок 9 - В проект необходимо добавить поддержку модуля
Далее необходимо в заголовочном файле (с расширением .h) в ветке
private вставить строку:
QLineSeries *series;
Здесь объявляется указатель на объект класса, в котором будут храниться
значения аргумента и функции.
Осталось добавить следующую строку в начало файла:
#include <QtCharts/QLineSeries>
Разместите на форме еще одну кнопку. В редакторе свойств смените
свойство objectName на graph. Щелчком по кнопке будет выводиться окно с
графиком. Создайте новый слот для обработки нажатия на кнопку и
отредактируйте код.
void MyDialog::on_graph_clicked()
{
QChart *chart = new QChart(); // создание графика
chart->setAnimationOptions(QChart::AllAnimations); // анимированное появление
chart->legend()->hide(); // не показывать легенду
chart->addSeries(series); // добавить набор данных
chart->createDefaultAxes(); // создать основные оси
chart->setTitle("График функции");
QChartView *chartView = new QChartView(chart); // создание объекта для показа
графика
chartView->setRenderHint(QPainter::Antialiasing); // сглаживание
chartView->setMinimumSize(640, 480);
QMainWindow *window = new QMainWindow(); // создание окна для вывода графика
window->setCentralWidget(chartView); // добавить график в окно
window->show();
}
Рисунок 10 - Код для вывода графика функции

82
Теперь немного измените слот обработки кнопки Вычислить:
Рисунок 11 - Внесение изменений в код
Добавьте строки в начало файла:
#include <QMainWindow>
#include <QtCharts/QChartView>
Соберите и запустите проект. Построенный график функции y=cos(x) при
изменении аргумента от -4 до 6 с шагом 0.1 изображен на рисунке 12.
Рисунок 12 - График функции y=cos(x)
Задание для самостоятельной работы
Спроектируйте форму и напишите программу для расчета таблицы
значений заданной функции по варианту, выбранному из методических
указаний по "Информатике" к лабораторной работе №3. Постройте график.

83
Лабораторная работа № 10
РАЗРАБОТКА ПРИЛОЖЕНИЯ ДЛЯ ОБРАБОТКИ ОДНОМЕРНОГО
МАССИВА
Цель работы: овладеть навыками применения виджета QTableWidget в
проектах на основе библиотеки Qt.
Лабораторная работа состоит из двух заданий.
Задание 1. Создание меню и панели инструментов в Qt Designer
1.1. Создать приложение Qt Widgets, на 3 шаге выполнить настройки
согласно рис.1.
Рисунок 1 - Создание приложения на основе класса QMainWindow
1.2. Перетащите на форму элемент Table Widget. Выделите его, в
редакторе свойств найдите свойства rowCount, columnCount и присвойте им
значения 10 и 1 соответственно. Снимите флажок verticalHeaderVisible.
Теперь выделите саму форму и нажмите на кнопку Скомпоновать по сетке.
1.3. Строка меню будет состоять из трех пунктов: Массив, Формат и
Справка. Для создания меню в верхней части формы нажмите дважды на
строке Пишите здесь, наберите Массив.
Приведите этот пункт меню к следующему виду:

84
Рисунок 2 - Содержание меню Массив
Таким же образом заполните меню Формат:
Рисунок 3 - Содержание меню Формат
В меню Формат ► Ячейка ► Выравнивание добавьте пункты по
центру и по нижнему краю справа. В меню Формат ► Ширина столбца
пункты автоподбор по содержимому и изменение вручную. Добавьте еще
один пункт меню Справка ► О программе.
Для каждого пункта меню Qt Creator создает свое действие, которое
отображается в Редакторе действий (он обычно находится под формой
проекта). В колонке Имя перечислены названия действий (action, action_2 и
т.д.). Дайте каждому из них соответствующие наименования, как показано на
рисунке 4.
Рисунок 4 - В редакторе действий перечислены все пункты меню

85
1.4. Для создания панели инструментов (Toolbox) необходимо иметь на
диске файлы иконок (их можно найти в интернете или нарисовать самим).
Она предназначена для быстрого доступа к часто выполняемым действиям.
Перейдите в раздел Редактор в левой части окна Qt Creator. На панели
Проекты нажмите правой кнопкой на названии проекта и выберите
Добавить новый…, затем Qt ► Файл ресурсов Qt. Введите имя файла
icons, нажмите Далее, Завершить. Щелкните правой кнопкой на новом
файле icons.qrc, затем Добавить существующие файлы. Добавляйте файлы
иконок по одному. Они появятся в окне ресурсов.
Чтобы связать иконку файла с определенным действием, требуется
дважды нажать на имени действия, выбрать значок и перетащить его из
Редактора действий на панель инструментов.
На данный момент форма должна выглядеть следующим образом:
Рисунок 5 - Окончательный вид приложения
Задание 2. Создание обработчиков событий
В окне редактора действий щелкните правой кнопкой на имени random
и выберите Перейти к слоту… Оставьте сигнал без изменений ⸺ triggered()
и нажмите OK. Напишите следующий код, при этом добавьте строку
#include "QRandomGenerator" в начало файла:
void massiv::on_random_triggered()
{
quint32 vector[10]; // объявление массива из 10 чисел
// заполнение массива случайными числами
QRandomGenerator::global()->fillRange(vector);
int column=ui->table->currentColumn(); // индекс текущего столбца
for(int i=0;i<10;i++)
{
// создание указателя на объект класса - ячейку таблицы
QTableWidgetItem *item=new QTableWidgetItem();

86
// значение из массива заносится в объект
item->setData(Qt::DisplayRole,vector[i]);
// в ячейку таблицы записывается число
ui->table->setItem(i,column,item);
}
}
Соберите и запустите проект. Для того чтобы ограничить числа диапазоном
127...128 исправьте строку item->setData(Qt::DisplayRole,qint8(vector[i]));.
Добавьте слот для действия sort_asc:
void massiv::on_sort_asc_triggered()
{
ui->table->sortItems(ui->table->currentColumn());
}
При нажатии на кнопку массив будет отсортирован по возрастанию.
Примечание. Если в редакторе свойств TableWidget поставить флажок
напротив свойства sortingEnabled, то сортировку можно будет выполнять
щелчком по заголовку столбца.
Подобным образом добавьте слот для сортировки значений по убыванию.
Чтобы изменить фоновый цвет в выделенной ячейке, добавьте следующий
слот:
void massiv::on_green_triggered()
{
ui->table->currentItem()->setBackground(Qt::green);
}
Самостоятельно добавьте слоты для red и blue.
Добавьте слот для sum и подсчитайте сумму отрицательных чисел. Также
необходимо подключить заголовочный файл #include "QMessageBox".
void massiv::on_sum_triggered()
{
// создается массив из 10 строк
QString str[10];
int i=0, sum=0;
while (i<10)
{
// проход по столбцу и запись чисел в массив
str[i]=ui->table->item(i,ui->table->currentColumn())->text();
// преобразование в целое число
int x=str[i].toInt();
if (x<0)
sum=sum+x;
i++;
}

87
// преобразование полученной суммы из числа в строку и вывод
QMessageBox::information(this,"Инфо","Сумма значений в столбце равна " +
QString::number(sum));
}
Слот для выхода из приложения:
void massiv::on_Exit_triggered()
{
QApplication::exit();
}
Слот для пункта меню Справка ► О программе. В сообщения можно
включать теги языка html, слово Пример выделяется полужирным
начертанием:
void massiv::on_About_triggered()
{
QMessageBox::about(this,"О программе", "<b>Пример</b> работы с виджетами
Qt");
}
Пункт меню Формат ► Добавить столбец. Новый столбец вставляется
перед текущим.
void massiv::on_add_column_triggered()
{
ui->table->insertColumn(ui->table->currentColumn());
}
Пункт меню Формат ► Ширина столбца ► автоподбор по содержимому:
void massiv::on_col_width_contents_triggered()
{
ui->table->horizontalHeader()-
>setSectionResizeMode(QHeaderView::ResizeToContents);
}
Самостоятельно вставьте слот для пункта Формат ► Ширина столбца ►
изменение вручную.
Пункт меню Формат ► Ячейка ► Выравнивание ► по нижнему краю
справа:
void massiv::on_align_right_triggered()
{
ui->table->currentItem()->setTextAlignment(Qt::AlignRight|Qt::AlignBottom);
}
Самостоятельно вставьте слот для пункта Формат ► Ячейка ►
Выравнивание ► по центру.
Добавьте слот для пункта Формат ► Очистить форматирование:

88
void massiv::on_format_clean_triggered()
{
// восстановление стандартных настроек для ячейки
ui->table->currentItem()->setTextAlignment(Qt::AlignVertical_Mask);
ui->table->currentItem()->setBackground(Qt::NoBrush);
}
Соберите и запустите проект. В результате разнообразных действий на
экране появится примерно следующее:
Рисунок 6 - Окно запущенного приложения
Задание для самостоятельной работы
Спроектируйте форму и напишите программу согласно варианту,
выбранному из методических указаний по "Информатике" к лабораторной
работе №6.

89
ЛИТЕРАТУРА
1. Шлее М. Qt 5.10. Профессиональное программирование на C++.
СПб.: БХВ-Петербург, 2018. 1072c.
2. Страуструп Б. Программирование. Принципы и практика с
использованием С++. 2-е изд. М., Вильямс, 2018. 1328 с.
3. Страуструп Б. Язык программирования C++. Краткий курс. 2
издание. М., Вильямс, 2019. 320 с.
4. Чукич И. Функциональное программирование на С++. ДМК Пресс,
2020. 360 с.
5. Конова Е., Поллак Г. Алгоритмы и программы. Язык С++.
Учебное пособие. М., Лань, 2020 г. 384 с.
6. Шилдт Г. C++: базовый курс. 3-е изд. М., 2021. 624 с.

90
Ольга Ильинична Моренкова
Алексей Юрьевич Голошубов
ПРОГРАММИРОВАНИЕ НА С++
В СРЕДЕ РАЗРАБОТКИ QT CREATOR
Учебно-методическое пособие
Корректор И.Л. Гончарова
Подписано в печать 20.12.2021, заказ № 95
п. л. 5,6, 90 стр., электронная версия – 1,92 Мб
Отдел рекламы и PR СибГУТИ
630102, г. Новосибирск, ул. Кирова, 86, офис 105
тел. (383) 269-83-56
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
