Преобразование строк и математические операции

В очередной раз модернизируем программу.

1.Добавим на форму еще одну кнопку. Отредактируем свойства кнопки objectName и text. Присвоим кнопке имя pushButtonCalc. Надпись на кнопке путь будет Расчет.

Программа должна будет работать следующим образом: пользователь вводит в поле редактирования lineEdit1 и lineEdit2 числа. При нажатии на кнопке «Расчет» в labelResult выводится корень из суммы чисел введенных в поле lineEdit1 и lineEdit2.

2. Откроем файл MainWindow.h и добавим в раздел public slots: прототип слота:

void CalcHandler();

в раздел signals: сигнал

void CalcSignal();

таким образом, файл MainWindow.h примет следующий вид:
  #ifndef MAINWINDOW_H#define MAINWINDOW_H #include <QMainWindow> namespace Ui {class MainWindow;} class MainWindow: public QMainWindow{ Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~ MainWindow (); private: Ui::MainWindow *ui; public slots: void MyEventHandler(); void CalcHandler(); signals: void MySignal(QString); void CalcSignal(); }; #endif // MAINWINDOW_H

3. Отредактируем файл MainWindow.cpp. В конструктор класса добавим строчку, связывающую слот CalcHandler() и сигнал clicked(), испускаемый при нажатии на кнопку pushButtonCalc:

QObject::connect(ui->pushButtonCalc, SIGNAL(clicked()),this,SLOT(CalcHandler()));

4. Добавим слот – функцию обработки, которая будет выполнять необходимые математические операции:

void MainWindow::CalcHandler(){

}

Операторы, помещенные между фигурными скобками, будут выполняться при нажатии на кнопку.

В итоге файл mainwindow.cpp должен принять следующий вид:

  #include "mainwindow.h"#include "ui_mainwindow.h" // подключение библиотеки // математических функций#include "math.h" MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); // изменение свойства text объекта labelResult ui->labelResult->setText("Результат!"); // свяжем сигнал со слотом QObject::connect(ui->pushButtonCopy,→ SIGNAL(clicked()),this, SLOT(MyEventHandler())); QObject::connect(this, SIGNAL(MySignal(QString)),→ ui->lineEdit_2, SLOT(setText(QString))); QObject::connect(this, SIGNAL(MySignal(QString)),→ ui->labelResult, SLOT(setText(QString))); QObject::connect(ui->pushButtonCalc,→ SIGNAL(clicked()),this,SLOT(CalcHandler()));} MainWindow::~ MainWindow (){ delete ui;} // тело слота (т.е. функции обработки сигнала)void MainWindow::MyEventHandler(){ emit MySignal(ui->lineEdit_1->text());} // Расчет корня из суммы чиселvoid MainWindow::CalcHandler(){ // Объявление трех переменных типа float float A; float B; float S; // Объявление двух переменных логического типа bool ok1, ok2; // Объявление переменной типа QString QString Res; // Считывание данных введенных в поля редактирования. // Производим преобразование строки в число // логическая переменная ok1 и ok2 сигнализирует о // успешности выполнении преобразования A=ui->lineEdit_1->text().toFloat(&ok1); B=ui->lineEdit_2->text().toFloat(&ok2); // Индикация корректности ввода данных в поле 1 if (ok1) { ui->lineEdit_1->setStyleSheet("background-color:→ white"); } else { ui->lineEdit_1->setStyleSheet("background-color:→ red"); } // Индикация корректности ввода данных в поле 2 if (ok2) { ui->lineEdit_2->setStyleSheet("background-color:→ white"); } else { ui->lineEdit_2->setStyleSheet("background-color:→ red"); } // Корень из суммы S=sqrt(A+B); // Преобразование числа в строку Res.setNum(S); // Вывод на экран ui->labelResult->setText(Res); }

Компилируем, запускам, экспериментируем. При вводе в поля текстовых значений и нажатии кнопки «Расчет» метка labelResult отображает результат вычисления. При вводе некорректных данных соответствующее поле окрашиваются в красный цвет. Экран получившейся программы приведен на рис. 7.

Рис. 7. Экрана программы при вводе данных.

Подведем итог. Мы освоили основные приемы работы с Qt и теперь можем приступать к разработке программы, предписанной индивидуальным заданием. Можно последовательно вносить изменения в уже начатый проект, а можно создать новый.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: