Ключевые слова: объектно-ориентированное программирование, QT, классы, калькулятор
Людям, делающим свои первые шаги в объектно-ориентированное программирование, полезно и крайне удобно делать это в программном пакете QT. В этой статье будет рассмотрена работа в QT на примере простейшего проекта — «Калькулятор».
QT — это кроссплатформенный фреймворк, который позволяет запустить программное обеспечение в любой операционной системе без изменения исходного кода. Также QT включает в себя множество полезных классов для работы с различными объектами, базами данных, графическим интерфейсом и многое другое, что сокращает объём работы. QT имеет множество и других полезных особенностей.
Проект калькулятор будет являться приложением QtWidgets, такой пункт и следует выбрать при создании проекта. После того как в диалоговом окне введены название проекта и путь, выбрать тип базового класса, который будет создан автоматически. Для проекта «Калькулятор» выберем тип QWidget, т. к. работа будет происходить непосредственно в главном окне, без использования строки меню, или панели инструментов, или всплывающих окон.
После создания проекта автоматически в нем будут созданы файлы:.срр, файлы главной функции и базового класса, heder базового класса и ui-форма. Написание проекта начинается в ui-форме — это окно, в котором можно создать внешний вид нашего проекта.
В созданной ui-форме надо расположить в нужном порядке необходимые компоненты визуальной составляющей проекта. Выберем в окне слева поле для ввода/вывода информации LineEdit и необходимое количество кнопок. Двойным нажатием на кнопку можно менять надпись на выбранной кнопке. Для калькулятора необходимо иметь кнопки с цифрами от 0 до 9, кнопки с простейшими операциями умножения, сложения, деления, вычитания, кнопки с такими операциями, как: возведение в степень, натуральный логарифм, синус и косинус, кнопка «=» для вывода результата операции и пара необходимых для любого калькулятора кнопок: стереть всё и стереть символ слева. Для того, чтобы код был понятным для любого пользователя, в свойствах любого объекта можно изменить его стандартное имя на более подходящее, например: Button_answer вместо pushButton_9.
Перейдем к самой программе. В heder файле необходимо объявить две переменные типа double и перечисление Operation, содержащее имена операций. В файле.срр опишем работу кнопок. Функции для описания работы кнопок по нажатию создаются после выполнения следующих действий: на ui-форме кликнуть ПКМ по нужной кнопке, во всплывающем окне выбрать «Перейти к слоту».. и выбрать сигнал clicked(). Функция для одной кнопки будет создана автоматически в файле calculator.cpp. Аналогичную операцию стоит провести со всеми имеющимися кнопками.
Стоит обратить внимание на разницу между оператором двойного двоеточия и точкой. Оператор двойного двоеточия отделяет имя класса от имени его члена или функции, а оператор точка отделяет имя экземпляра класса от имени его члена или функции.
Теперь опишем функции кнопок. Для кнопок с цифрами будем выводить в поле ввода/вывода информации цифру с кнопки. Вот пример функции для кнопки с единицей.
voidCalculator::on_OneButton_clicked()
{
ui->lineEdit->insert("1");
}
По нажатию на кнопки с простейшими арифметическими операциями, запишем в первую переменную типа double число, содержащееся в поле ввода/вывода информации, присвоим перечислению operation значение, соответствующее назначению кнопки и очистим поле ввода/вывода информации LineEdit. Пример функции для кнопки с назначением сложения:
voidCalculator::on_Button_plus_clicked()
{
A=ui->lineEdit->text().toDouble();
operation=Sum;
ui->lineEdit->clear();
}
Как можно заметить, по нажатию на кнопку с операцией, пока не производит самого вычисления, это мы оставили кнопке вывода результата. В её функции пропишем присваивание значения второй переменной типа double, объявим новую переменную для записи результата и, используя оператор ветвления switch, пропишем операции для получения результата для каждого значения перечисления operation. Затемвыведемполученныйответ.
voidCalculator::on_Button_answer_clicked()
{
B=ui->lineEdit->text().toDouble();
doubleC;
switch(operation){
caseSum:
C=A+B;
break;
caseSub:
C=A-B;
break;
caseDiv:
C=A/B;
break;
caseMult:
C=A*B;
break;
}
ui->lineEdit->setText(QString::number(C));
}
Для кнопок с операциями, не требующими второго числа, вычисление и вывод результата будут производиться сразу же. Читаем значение числа из поля ввода/вывода, рассчитываем квадрат, или логарифм, или синус или косинус, и сразу выводим на LineEdit. Это не сложно и аналогично предыдущим функциям, поэтому пример приводить не буду. Обработка нажатия на кнопку Clear — самое элементарное, а вот Deletе поинтереснее. Для того, чтобы удалить в поле ввода/вывода один элемент, понадобится считать, имеющееся число как строку, удалить в нём один элемент и записать обратно.
voidCalculator::on_Button_Del_clicked()
{
QStringstr=ui->lineEdit->text();
str.chop(1);
ui->lineEdit->setText(str);
}
В современном мире существует множество кроссплатформенных инструментариев разработки. Вопрос выбора оптимального встает перед каждым человеком начинающим изучать программированием. Данная статья является показательным примером того, как просто и удобно работать в программном пакете QT, на примере программы «Калькулятор».
Литература:
1. Роберт Лафоре. Объектно-ориентированное программирование в С++. — 4-е изд. —: Питер, 2015. — 928 с..
2. Creating a Qt Widget Based Application // Qt. URL: http://doc.qt.io/qtcreator/creator-writing-program.html (дата обращения: 14.10.2016).