Простая программа вычисления гипотенузы прямоугольного треугольника по двум катетам

  • Постановка задачи
  • Составить программу получения значения гипотенузы прямоугольного треугольника по двум катетам. Базовый класс QWidget. На форме разместить следующие виджеты: два однострочных поля ввода, кнопка и три метки на одну из которых выводится вычисляемое значение. Для компоновки виджетов использовать QFormLayout. Проверить правильность вводимых числовых значений, если вводится не числовое значение, то на метке вывести FALSE.

  • Внешний вид приложения
  • qt1

  • Файл widget.h
  • #ifndef WIDGET_H
    #define WIDGET_H
    #include <QPushButton>
    #include <QLineEdit>
    #include <QLabel>
    #include <QFormLayout>
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit Widget(QWidget *parent = 0);
    
    private:
        QPushButton *knopka;
        QLineEdit *tpole_a;
        QLineEdit *tpole_b;
        QLabel *clabel;
        QLabel *alabel;
        QLabel *blabel;
        QFormLayout *frmlayout;
    private slots:
        void ptxt();
    };
    
    #endif // WIDGET_H
    
  • Файл widget.cpp
  • #include "widget.h"
    #include <QString>
    #include <cmath>
    
    Widget::Widget(QWidget *parent) :
        QWidget(parent)
    {
        // Вывод компонентов
        knopka = new QPushButton(this);
        // tr() используется для перевода (локализации)
        knopka->setText(tr("Computing"));
        tpole_a = new QLineEdit(this);
        // Устанавливаем фокус на первое текстовое поле ввода
        tpole_a->setFocus();
        tpole_b = new QLineEdit(this);
        clabel = new QLabel(this);
        clabel->setFrameStyle(1);
        alabel = new QLabel("a = ", this);
        blabel = new QLabel("b = ", this);
        
        // Компоновка QFormLayout
        // в две колонки, чаще применяемая в диалогах
        frmlayout = new QFormLayout;
        //Все поля будут увеличиваться, чтобы заполнить доступное место
        frmlayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
        frmlayout->addRow(alabel, tpole_a);
        frmlayout->addRow(blabel, tpole_b);
        frmlayout->addRow(knopka, clabel);
        setLayout(frmlayout);
    
        // Сигнал
        connect(knopka,SIGNAL(clicked()),this,SLOT(ptxt()));
    }
    
    void Widget::ptxt(){
    // Функция определяет действие в результате нажатия на кнопку
    // (Функция слота)
        QString string = tpole_a->text();
        bool ok;
        double a = string.toDouble(&ok);
        string = tpole_b->text();
        double b = string.toDouble(&ok);
        double c = hypot(a,b);
        // Проверяем на правильный ввод
        if (ok!=0) {
            clabel->setNum(c);
        } else {
            clabel->setText("FALSE");
        }
    }
    
  • Файлы проекта
  • computing

  • Постановка задачи для самостоятельной работы
  • Составить программу вычисления объема конуса по диаметру основания и высоте. Использовать компоновку QGridLayout (в данном случае правильный вариант). Вывод значения предварять текстом (на метке) «V = «. Выводить в экспоненциальном формате. Установить кнопку закрытия окна и кнопку очистки текстовых полей. Использовать «&» для задания горячих клавиш.

  • Ссылки

Добавить комментарий