Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на С++ в среде разработки Qt Creator. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]