Определение типа дроби (Qt, C++)

Помечено: , ,

  • В этой теме 0 ответов, 1 участник, последнее обновление 1 месяц назад сделано Васильев Владимир Сергеевич.
Просмотр 0 веток ответов
  • Автор
    Сообщения
    • #6970
      @admin
      StudLance.ru

      Задача: составьте программу в Qt C++, определяющую по двум значениям, какой тип дроби задает пользователь (правильная или неправильная).

      Это хорошая практика создания своих виджетов Qt.

      Программа должна позволять вводить пользователю два целых числа и выводить результат — строку. Создадим класс MainWidget с полями m_numerator и m_divisor типа QLineEdit, а также полем m_fractionType типа QLabel. При вводе данных в первые два поля будем вызывать функцию (слот) calcType, выводящий результат в QLabel:

      class MainWidget : public QWidget {
        Q_OBJECT
      public:
        explicit MainWidget(QWidget *parent = 0);
      private slots:
        void calcType();
      private:
        QLineEdit m_numerator, m_divisor;
        QLabel m_fractionType;
      };

      В конструкторе класса применим к редактируемым полям валидаторы, чтобы в них нельзя было ввести ничего кроме целых чисел.

      Затем, создадим табличную раскладку и на нее поместим подсказки для ввода данных и наши поля (m_numerator, m_divisor, m_fractionType).

      Наконец, соединим сигналы от полей ввода с нашим слотом с помощью функции connect:

      MainWidget::MainWidget(QWidget *parent)
        : QWidget(parent) {
      
        m_divisor.setValidator(new QIntValidator(this));
        m_numerator.setValidator(new QIntValidator(this));
      
        QGridLayout *grid = new QGridLayout(this);
        setLayout(grid);
      
        grid->addWidget(new QLabel("делимое: ", this), 0, 0);
        grid->addWidget(&m_numerator, 0, 1);
      
        grid->addWidget(new QLabel("делитель: ", this), 1, 0);
        grid->addWidget(&m_divisor, 1, 1);
      
        grid->addWidget(new QLabel("дробь: ", this), 2, 0);
        grid->addWidget(&m_fractionType, 2, 1);
      
        connect(&m_divisor, SIGNAL(textChanged(QString)), this, SLOT(calcType()));
        connect(&m_numerator, SIGNAL(textChanged(QString)), this, SLOT(calcType()));
      
        calcType();
      }

      Слот calcType выполняем проверку — дробь правильная если числитель больше знаменателя:

      void MainWidget::calcType() {
        int numerator = m_numerator.text().toInt();
        int divisor = m_divisor.text().toInt();
      
        if (divisor == 0) {
          m_fractionType.setText("некорректная");
        }
        else if (numerator >= divisor) {
          m_fractionType.setText("неправильная");
        }
        else {
          m_fractionType.setText("правильная");
        }
      }

      Результат работы выглядит так:

      StudLance.ru

Просмотр 0 веток ответов
  • Для ответа в этой теме необходимо авторизоваться.
×