Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 Прикладное программирование на языке c++ с использованием среды Qt Creator 5.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.72 Mб
Скачать

Обработка стандартных событий

Графических объекты из библиотеки 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 (см. ниже).