- •Первый проект Создание графического приложения
- •Обучающие возможности Qt Creator
- •Структура проекта и основы ооп
- •Обработка событий с использованием сигналов и слотов
- •Функция connect
- •Создание собственных слотов и сигналов
- •Полезные мелочи Использование класса qDebug
- •Работа с объектами на примере класса qString
- •Использование контейнеров на примере qList
- •Контейнер qStringList
- •Использование редактора форм (Qt Designer)
- •Элементы формирования
- •Элементы управления Кнопки (Button)
- •Обработка стандартных событий
- •Углубление знаний Работа с файлами, диалоги Класс qFile
- •Класс qDir
- •Стандартные диалоги, диалоги выбора файла
- •Специальные вопросы Создание графика функций и пример переопределения функции на форме
- •Использование многопоточности
- •Создание текстового меню действий (action)
- •Дополнительные возможности
- •Рабочий стол – класс qDesktopWidget
- •Сохранение настроек приложения – класс qSettings
- •Окно заставка приложения (qSplashScreen)
- •Управление сессией (qSessionManager) Иконка в области оповещения (qSystemTrayIcon)
- •Описание приложения
- •Совместное использование Qt с платформозависимыми api
- •Использование ресурсов
- •Установка изображения (иконки) для виджетов
- •Установка иконки для exe-файла
- •Создание приложений для андроид
- •Установка инструментов разработки для андроид
- •Установка пиктограммы для приложения
- •Подсветка кода
- •Сокрытие и отображение кода
- •Автоматическое дополнение кода
- •А где определен атрибут?
- •Контекстная справка
- •Использование английского языка
- •Использование документации
- •Задание 2 Тема 4 Работа с файлами
- •Задание 1 работа с файлами (св)
- •Тема 5 Работа с графикой Задание 1 Графики функций
- •Задание 2 Рисование графических примитивов
- •Тема 6 Создание полноценного приложения
- •Список литературы
Обработка стандартных событий
Графических объекты из библиотеки QtWidget.h имеют ряд виртуальных функций, предназначенных для обработки стандартных событий внутри объекта. Виртуальные функции используются в C++ для переопределения в классах наследниках. Некоторые из функций-обработчиков перечислены в таблице. Механизм обработки событий является механизмом более низкого уровня по сравнению с механизмом взаимодействия сигнал-слот.
Таблица – Функции для обработки стандартных событий
Функция |
Событие |
keyPressEvent (QKeyEvent *event) |
Нажатие клавиши клавиатуры |
keyReleaseEvent (QKeyEvent *event) |
Отпускание клавиши клавиатуры |
mouseDoubleClickEvent (QMouseEvent *event) |
Двойной щелчок клавиши мыши |
mouseMoveEvent(QMouseEvent *event) |
Перемещение курсора мыши после нажатия клавиши |
mousePressEvent(QMouseEvent *event) |
Нажатие клавиши мыши |
mouseReleaseEvent(QMouseEvent *event) |
Отпускание клавиши мыши |
moveEvent(QMoveEvent *event) |
Перенос объекта |
resizeEvent(QResizeEvent* event) |
Сообщает об изменении размера виджета (изменение уже произошло) |
paintEvent(QPaintEvent *event) |
Перерисовка виджета |
closeEvent(QCloseEvent *event) |
Закрытие окна. Выполняется при закрытии окна. Позволяет контролировать закрыто окно после обработки события или нет. |
Переопределив эти функции в классе-наследнике можно их использовать для обработки действий пользователя [Шлее 5.3 c. 233-251, Иванова с. 44-50]. Рассмотрим примет перемещения мыши и зажатой кнопкой над окном. В описании класса (mainwindow.h) в раздел privet класса (MainWindow) добавляем объявление функции mouseMoveEvent()
privet:
void mouseMoveEvent(QMouseEvent *);
и определяет её в файле mainwindow.cpp
void MainWindow::mouseMoveEvent(QMouseEvent *event);
{
QDеbug() << event->x() << event->y();
}
Использование этого механизма позволяет получить более детальные сведения о действиях пользователя, по средствам аргумента функции. Так объект класс QMouseEvent передаёт информацию о координатах нажатия мыши и нажатой кнопке. Например, условие проверяющее нажатие средней кнопки мыши будет выглядеть как
if(event->button() == Qt::LeftButton)
Таблица – некоторые константы, соответствующие нажатым кнопкам мыши
Клавиша |
Значение |
Левая |
Qt::LeftButton |
Правая |
Qt::RightButton |
Средняя |
Qt::MidButton |
«Back» |
Qt::BackButton |
«Forward» |
Qt::XButton2 |
Аналогично можно добавить условие проверяющее нажатие модификатора (кнопки клавиатуры).
if(event->modifiers() == Qt::ControlModifier)
qDebug() << "Ctrl";
Таблица – некоторые константы, соответствующие зажатым кнопкам на клавиатуре
Клавиша |
Значение |
Никакая |
Qt::NoModifier |
Shift |
Qt::ShiftModifier |
Ctrl |
Qt::ControlModifier |
Alt |
Qt::AltModifier |
Согласно логике применения виртуальных функций, они теряют функционал своего предка. Но иногда его нужно сохранить. Для этого в их реализации следует добавить строчку, содержащую название этой функции из класса-родителя и передать в эту функцию аргумент. Так, рассмотренный пример будет реализован как
void MainWindow::mouseMoveEvent(QMouseEvent *event);
{
QMainWindow:: mouseMoveEvent(event);
…
}
Подробнее об обработке событиях [Бланшет 2 гл. 7, Шлее 5.3 гл. 14]. На этом заканчивается перечень тем, которые должны быть изучены для создания простейших графических приложений. Для закрепления знаний выполните задание из темы 3 (см. ниже).
