§2 Кнопки и текстовые поля. Программируем сигналы


Обзор файлов проекта

Создайте новый проект. В процессе создания проекта выберите базовый класс QWidget. Система создает автоматически несколько файлов:

  • Файл проекта *.pro
  • Заголовочный файл widget.h
  • Файлы исходников main.cpp и widget.cpp
  • Файл формы widget.ui
Программа qt_2.1 widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
    class Widget;
}
class Widget : public QWidget
{
    Q_OBJECT
public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
Программа qt_2.1 main.cpp
#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}
Программа qt_2.1 widget.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

Все содержимое этих файлов система создаст также автоматически. В заголовочном файле объявлен наш класс Widget. Реализация самого класса выполнена в отдельном одноименном файле widget.cpp. Собственно, пока что он состоит только из конструктора и деструктора. Конструктор показывает, что наш класс наследует класс QWidget и класс пользовательского интерфейса ui. Если класс QWidget сам управляет ресурсами, то для объектов пользовательского интерфейса мы должны запросить выделение памяти, которую, впоследствии, мы должны будем освободить. Главная функция программы находится в файле main.cpp. Но если ранее мы использовали эту функцию без аргументов, то теперь должны указать их явно:

int main(int argc, char *argv[])

Это означает, что Qt будет обрабатывать аргументы командной строки. В теле функции создаются объекты двух классов: QApplication – для управления ресурсами приложения и нашего класса Widget. Метод show() показывает виджет и его дочерние виджеты. Метод exec() запускает основной цикл программы.

Элементы кнопки и текстовые поля

Настало время создать приложение, которое выполняет “полезную” работу. Наиболее часто используемые элементы управления – это кнопки и текстовые поля.

Для удобства все элементы управления сгруппированы по категориям. Сверните все категории в заголовки. Сделать это можно ПКМ на панели > Свернуть всё.

В боковой панели элементов найдите категорию “Input Widgets”. (Описание элементов этой категории относящихся к вводу текста приводится ниже). Найдите в этой категории элемент Line Edit и перетащите, захватив ЛКМ, на форму. Разместите ещё один такой элемент в верхней части формы справа.

Input Widgets
Название Описание
Combo Box Сочетание кнопки и всплывающего списка
Line Edit Однострочный редактор текста
Text Edit Поле редактирования текста с поддержкой HTML. Автоматическое отображение полосы прокрутки
Plain Text Edit Поле редактирования текста без поддержки разметки
Spin Box Виджет счетчика
Double Spin Box Виджет счетчика, принимающего значения с плавающей точкой
В этой таблице не приведены элементы ввода даты и времени, которые мы рассмотрим позднее

Теперь найдите категорию “Buttons”. Перетащите на форму две кнопки Push Button. Разместите компоненты как показано на рис. 1. (Описание элементов этой категории приводится ниже).

Рис. 1.
Buttons
Название Описание
Push Button Командная кнопка
Tool Button Кнопка быстрого доступа к командам или настройкам, обычно используется в QToolBar
Radio Button Переключатели с текстовыми метками
Check Box Флажок с текстовой меткой

Добавьте на форму два элемента label и установите их так, как показано на Рис. 1. В панели Инспектора объектов установите значение следующих свойств элемента label:

  • aligment:
    Горизонтальное => AlignHCenter,
    Вертикальное => AlignVCenter
  • text: +
Аналогично и для элемента label_2, но значение свойства text сделайте пустым.
Для элементов LineEdit и LineEdit_2 установите значение свойства text: 0 (без кавычек!).
Для элемента Widget установите значение свойства windowTitle: Сложение чисел.
Для элемента pushButton установите значение свойства text: =, а для pushButton_2text: Очистить
Внешний вид окна программы должен быть приблизительно такой:

Рис. 2.

Как вы уже догадались, наша программа должна сложить два числа и вывести результат в самом окне.

Посылаем сигнал

Для взаимодействия между объектами в Qt разработана система сигналов и слотов. Для различных объектов в Qt уже разработано большое количество сигналов для того, чтобы их не программировать вручную. Выделите объект pushButton > ПКМ вызвать контекстное меню > Перейти к слоту. Появится окно выбора сигнала (Рис. 3). Выбираем clicked и автоматически переходим к редактированию класса Widget. Будет создан метод on_pushButton_clicked(), который мы должны прописать.

Обращаем внимание, что также происходит автоматическое объявление этого метода и в заголовочном файле:

private slots:
  void on_pushButton_clicked();

Рис. 3.

Фрагмент кода, который мы должны прописать:

void Widget::on_pushButton_clicked()
{
    int x, y, z;
    // Получаем значение из lineEdit
    QString S1 = ui->lineEdit->text();
    // Преобразуем его в числовое значение
    x = S1.toInt();
    // Получаем значение из lineEdit_2
    QString S2 = ui->lineEdit_2->text();
    // Преобразуем его в числовое значение
    y = S2.toInt();
    // Вычисляем сумму
    z = x + y;
    // Выводим результат
    ui->label_2->setNum(z);
}

Для того, чтобы вернуть все к значению по умолчанию, мы сделали еще одну кнопку. Запрограммируем и её:

void Widget::on_pushButton_2_clicked()
{
    ui->lineEdit->setText("0");
    ui->lineEdit_2->setText("0");
    ui->label_2->clear();
}

В этих фрагментах мы использовали публичные слоты: setText, clear(), setNum(). Слоты – это особые методы, которые могут принимать сигналы. Каждый библиотечный класс имеет свой набор слотов (и сигналов). Какие конкретно сигналы и слоты имеются в наличии у определенного класса вы можете посмотреть в документации: Справка > Содержание > Qt Widgets > C++ Classes… и, например > QLabel Class Reference.
Сохраните все, соберите проект и запустите его на выполнение. Примените стилевое оформление к элементам нашего окна так, как мы показали на прошлом уроке. Наше приложение “в работе”:

Рис. 4.
Задания
  • Составьте приложение вычисляющее параметры треугольника по двум катетам
  • Составьте программу преобразования каких-либо единиц измерения (массы, объема, длины) в систему интернациональную (СИ)
  • Составьте программу-конвертер температур (Цельсий-Фаренгейт-Кельвин)
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Print Friendly, PDF & Email

Comments are closed.