- •2 Часть
- •План лекции
- •1 Как работает оконное приложение вWindows
- •2 Добро пожаловать вQt
- •2.1 Сигналы и слоты
- •2.2 Как обратиться из кода обработчика к элементам управления
- •2.2.1 Именование элементов управления
- •2.2.2 Практика
- •2.3 Как показать сообщение
- •2.3.1 Текст заголовков окон
- •2.3.2 Практика
- •2.4Htmlтеги
- •3.1 Создание дополнительных окон
- •3.2 Передача данных окнам
- •Void Initialize(int age);
- •Void InputAgeDialog::Initialize(int age)
- •3.3 Получение данных от формы
- •Int GetAge() const;
- •Virtual void done(int code);
- •If (!ageIsInt)
- •5 Компоновка (Layout)
2 Добро пожаловать вQt
Здесь будет поверхностно рассмотрена технология QtWidgets. Эта технология отмирает и на смену ей приходит в данный момент другая технологияQtQuick, в которой интерфейс пишется наQml. К сожалению, на изучениеQmlнужно больше чем 20 минут, поэтому в рамках лекций он рассматриваться не будет. Если вы самостоятельно его изучите, это будет плюс вам, так как идея не нова и используется в ряде других технологий, напримерWPFна .Net.
Здесь также будет рассмотрено только GUI-шная частьQt(в виду ограниченности времени), хотяQtкак набор библиотек содержит много других толковых вещей: работа с сетью,xml, шаблоны потрясающе сделаны и задокументированы.
Установка Qtи подключение отладчика нами уже была рассмотрена ранее, повторятся не будет.
Я не являюсь экспертом в Qt, поэтому могут быть ошибки.
2.1 Сигналы и слоты
В терминах Qtсобытие в жизни элемента управления называется сигнал, а обработчик события – слотом. В качестве обработчика события выступают методы какого-то класса.
Давайте посмотрим, как добавить слот на сигнал. Создадим QtWidgetsприложение, перетащим на него кнопку с панели инструментов, затем нажмем на ней контекстное меню, Перейти к слоту, выбираем сигнал, нажимаем ОК.
создался слот
void MainWindow::on_pushButton_clicked()
{
}
С остальными элементами управления делается все по аналогии. Можете поиграться дома с остальными элементами управления.
2.2 Как обратиться из кода обработчика к элементам управления
2.2.1 Именование элементов управления
Если вы находитесь в коде формы, то переключитесь на дизайнер либо через Shift+F4 либо здесь:
В дизайнере можно задать имя элементу управления.
Одна из принятых практик именования элементов управления такая. Элементы управления называют как поля класса, начиная с m_, дальше идет осмысленное название кнопки (например, фрагмент текста на ней), и дальше тип элемента управления, т.е.m_okPushButton. Это один из распространенных подходов именования элементов управления.
2.2.2 Практика
Установим в панели свойств текст кнопки в OK, имя объекта вm_okPushButton. Обратите внимание, пары сигнал-слоты после переименования элемента управления пропали. Заведем заново слот на событие «нажата кнопка».
Как из кода достучаться до m_okPushButton? Через указательuiможно получить доступ ко всем элементам управления. Пример.
void MainWindow::on_m_okPushButton_clicked()
{
ui->m_okPushButton->setText("Test");
}
Дома можете накидать элементов управления и поиграться с ними из кода: поменять текст, состояние, спрятать, показать, поставить галочку…
2.3 Как показать сообщение
2.3.1 Текст заголовков окон
Заголовок окон принято делать так: Название окна – Название приложения
Так делают, поскольку у большинства пользователей несколько мониторов и запущено множество приложений. И они, переключаясь между окнами, могут иногда потерять окно с сообщением и подумать, что приложение зависло.
Все слова, за исключением предлогов и артиклей в заголовке окна начинают со строчной буквы, пример: AddBook–SuperApp.
2.3.2 Практика
Вставляем в MainWindow.cpp.
#include <QMessageBox>
Пример информационного сообщения.
void MainWindow::on_m_okPushButton_clicked()
{
QMessageBox::information(
this,
"Информация - СуперПриложение",
"Описание ошибки");
}
Пример вопроса (дома можете поиграться с кнопками).
void MainWindow::on_m_okPushButton_clicked()
{
if (QMessageBox::question(
this,
"Удаление файла - СуперПриложение",
"Подтвердите удаление файла",
QMessageBox::Yes | QMessageBox::Cancel) == QMessageBox::Yes) // QMessageBox::Yes | QMessageBox::Cancel – указание, какие кнопки показывать.
{
QMessageBox::information(
this,
"Информация - СуперПриложение",
"Файл удален",
QMessageBox::Information);
}
else
{
QMessageBox::information(
this,
"Информация - СуперПриложение",
"Файл не удален",
QMessageBox::Information);
}
}
Как вставить в текст дополнительные данные.
void MainWindow::on_m_okPushButton_clicked()
{
QString messageBody = tr("Описание ошибки\n%1\n%2")
.arg("аргумент 1")
.arg("аргумент 2");
QMessageBox::information(
this,
"Информация - СуперПриложение",
messageBody);
}
или более кратко:
void MainWindow::on_m_okPushButton_clicked()
{
QMessageBox::information(
this,
"Информация - СуперПриложение",
tr("Описание ошибки\n%1\n%2")
.arg("аргумент 1")
.arg("аргумент 2"));
}