Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornyy_praktikum_po_programmirovaniyu_v_s...doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1.4 Mб
Скачать

Пример 2: Программа, которая находит квадратный корень числа.

П рограмма будет находить неотрицательный корень вещественного числа. Квадратный корень можно вычислить, только если подкоренное выражение неот­рицательно, поэтому при недопустимом введенном значении программа будет вы­давать сообщение об ошибке. Сообщение об ошибке может быть достаточно пространным, поэтому для вывода результата используем элемент Text Edit, который автоматически переносит текст на другую строку.

Спроектируйте диалоговое окно как показано на рисунке. Элементы, которые вы должны добавить: Label, Line Edit, Push Button и Text Edit. Верхние три элемента выровняйте, выделив их и нажав кнопку Lay Out Vertically. Text Edit не включайте в Layout, чтобы иметь возможность изменять его размеры.

Создайте слот для кнопки «Корень» и напишите код, показанный ниже.

#include "dialog.h"
#include "ui_dialog.h"
#include <math.h>
#include <QTextCodec>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    adjustSize(); // делаем размеры окна минимально-необходимыми
}
Dialog::~Dialog()
{
    delete ui;
}
void Dialog::on_pushButton_clicked()
{
    QTextCodec* codec = QTextCodec::codecForName("UTF-8");
   QTextCodec::setCodecForCStrings(codec);
// 2 строчки, приведенные выше, позволяют выводить текст на русском языке

   double x = ui->lineEdit->text().toDouble(); // считываем число
   double y;
   if (x>=0)
   {
       y=sqrt(x); // извлекаем квадратный корень
       ui->textEdit->setText(QString::number(y,'f',5));
// выводим число с точностью 5 цифр после точки
   }
   else  ui->textEdit->setText("Число должно быть >= 0");
 // выводим сообщение об ошибке
}

Запустите программу и проверьте ее работу для допустимых и недопусти­мых исходных данных. Если текст сообщения умещается в одну строку, сделайте окно Text Edit поуже, чтобы увидеть как текст переносится на другую строку.

Пример 3: Программа, которая иллюстрирует использование стандартных сигналов и слотов.

В качестве примера создадим программу, которая отображает введенное целое десятичное число или в двоичном, или в восьмеричном, или в десятичном или в шестнадцатеричном виде. Это легко сделать с помощью элемента LCD Number, который предназначен для отбражени чисел в виде жидко-кристаллического экранчика.

С оздайте проект на базе класса QWidget. Спро­ектируйте окно как показано на рисунке, используя элементы: Label, Line Edit, 4 Push Buttons, LCD Number.

В свойствах LCD Number установите : segment Style : Flat, digitCount : 20 (количество сегментов экра­на, т.е. максимальное количество отображаемых цифр). Чем больше задать количество цифр, тем они будут мельче).

Задавать число мы будем с помощью элемента Line Edit. При изменениии числа в окне Line Edit должно изменяться значение в LCD Number. Для обес­печения этой связи можно использовать окно, которое располагается под проектом вида окна. Перейдите на вкладку Signals & Slots Editor и нажмите +. В список связей будет добавлена новая строка. Сделайте двойной щелчок в появившейся строке в первом поле <sender>. В появившемся списке выберите элемент lineEdit. Повторите эти действия в других полях так, чтобы связь была задана как показано на рисунке.

В результате при изменении содержимого элемента Line Edit будет автоматически изменяться содержимое элемента LCD Number.

Добавьте слот для кнопки <bin> и напишите в нем код как показано ниже. Повторите эти действия для других кнопок.

void Widget::on_pushButton_clicked()
{
    ui->lcdNumber->setMode(QLCDNumber::Bin); // двоичное представление 
    ui->lineEdit->setFocus();
}
void Widget::on_pushButton_2_clicked()
{
    ui->lcdNumber->setMode(QLCDNumber::Oct);
	// восьмеричное представление
    ui->lineEdit->setFocus();
}
void Widget::on_pushButton_3_clicked()
{
    ui->lcdNumber->setMode(QLCDNumber::Dec); // десятичное представление
    ui->lineEdit->setFocus();
}
void Widget::on_pushButton_4_clicked()
{
    ui->lcdNumber->setMode(QLCDNumber::Hex); // 16-е представление
    ui->lineEdit->setFocus();
}
Запустите программу и проверьте работу приложения.  
Обратите внимание на то, что в заголовке окна появилась кнопка «свернуть окно» (её не было в диалоговом окне), но теперь окно появляется в углу экрана. Откройте файл main.cpp и отредактируйте его так, как показано ниже. 
 #include <QtGui/QApplication>
#include "widget.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.move(400,300);  // перемещаем окно в центр экрана
    w.show();
    return a.exec();
}
Запустите программу.

Закройте проект.