Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КП - 2 часть - Лекция 3. Знакомство с QT.docx
Скачиваний:
27
Добавлен:
11.05.2015
Размер:
695.85 Кб
Скачать

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"));

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]