суббота, 25 мая 2013 г.

Первое GUI "формальное" приложение: "Сложение двух чисел"

Если отличия в консольных приложениях кьюта с С++ и есть, я пока не особо хочу на этом останавливаться, за университетские годы было написана куча всяких отвратительных консоль-задач, поэтому сразу в GUI!
В состав Qt входит очень полезный компонент Qt Designer. Этакий BorlandBuilderC++-style (на котором мне приходится до сих пор, как в каменном веке, писать различные учебные приложения для курсовых).


"Qt Designer позволяет создавать графические интерфейсы пользователя при помощи ряда инструментов. Существует панель инструментов «Панель виджетов», в которой доступны для использования элементы интерфейса — виджеты, такие как, например, «выпадающий список» ComboBox, «поле ввода» LineEdit, «кнопка» PushButton и многие другие. Каждый виджет имеет свой набор свойств, определяемый соответствующим ему классом библиотеки Qt. Свойства виджета могут быть изменены при помощи «Редактора свойств». Для каждого класса свойств виджета существует свой специализированный редактор. Характерной особенностью Qt Designer является поддержка визуального редактирования сигналов и слотов. Так, например, можно связать сигнал, генерируемый по переключению состояния виджета CheckBox со слотом отвечающим за доступность другого виджета. Разработанный интерфейс сохраняется в файл с расширением ui, который подключается к создаваемой программе с помощью специальных методов библиотеки Qt. Этот файл имеет xml-формат, и может, в случае необходимости, редактироваться в любой текстовом редакторе."

Далеко ходить не будем. Решили писать "формочные" приложения - тогда за дело.

Создаем новый проект GUI приложение Qt. Со всем соглашаемся. Будем пока пользоваться предоставленной формой.
Два раза кликаем в разделе Формы по нашему единственному файлу и попадаем в тот самый дизайнер. Я удалила пока за ненадобностью в окне Объект всё, кроме central Widget.

Наляпаем на форме для начала 3 Text Edit и кнопку Push Button. Очень удобно пользоваться фильтром имени.
Далее, будем приучаться к лотку хорошему стилю, и справа, в окне свойств элементов зададим заголовок  форме. Для этого выделим форму и в поле фильтр начнем вводить title. А там нам уже подсказывают, что заголовок формы - это по их "windowTitle", обзываем, например, "Сумма".
Следующим шагом проявлением хорошего тона будет смена имен наших объектов (трех полей ввода и кнопки). Выбирает каждый из них и пользуясь фильтром, ищем objectName. Первого нарекаем num1, второго - num2,  третьего - result.
Чтобы изменить текст на кнопке - используем снайперский двойной клик.
Собственно, действие. Очень много событий происходит тогда, когда пользователь что-то нажимает, в нашем случае - кнопку.
Кликаем правой кнопкой мышки по кнопке и выбираем Перейти к слоту -> clicked(). Собственно, эта штука и будет у нас запускать выполнение чего-то, потому что на нее нажали.
Итак, нам нужны 3 переменные.
Первая num1 - будет содержать в себе число из первого TextEdit, вторая - num2 - из второго, третья - result - из третьего. Все они будут иметь тип int.
По логике любой среды разработки, в переменные нужно считать значения из полей ввода. Поля ввода, по традиции, возвращают в переменную строковый тип QString(), мы же должны сложить числа, а не буквы, а вот результат снова вернуть строкой.
Интуитивно понятный код выглядел бы так:
int num1 = ui->num1->toPlainText().toInt(); //получаем число из первого поля
int num2 = ui->num2->toPlainText().toInt(); //получаем число из второго поля
int result = num1 + num2; //складываем и записываем результат
ui->result->setText(QString::number(result)); //задаем текст равным результату
Обращаю внимание на num1->toPlainText(). Сама по привычке использовала просто Text(). 
Этот код можно написать куда элегантнее, короче и не по-ученически. Скажем так: 
ui->result->setText(QString::number(ui->num1->toPlainText().toInt()+ui->num2->toPlainText().toInt()));
Одной строкой: выводим в поле result то, что считали из num1, переведенное в целый тип int + то, что считали из num2, также переведенное в целый тип  int.
Весь слот, замечу, без объявления переменных вообще.
Ну что ж, наше страшненькое приложение. 

Надписи на форме можно сделать с помощью объекта Label, а настроить шрифт и размер текста в полях можно в свойствах каждого объекта в открывающемся списке font.

Комментариев нет:

Отправить комментарий