Alt linux Программирование на языке С++ в среде Qt Creator Е. Р. Алексеев, Г. Г. Злобин, Д. А. Костюк, О. В. Чеснокова, А. С. Чмыхало Москва alt linux 2015



Download 5,27 Mb.
Pdf ko'rish
bet176/193
Sana24.02.2022
Hajmi5,27 Mb.
#227496
1   ...   172   173   174   175   176   177   178   179   ...   193
Bog'liq
Book-qtC


Глава 14. Создание элементов графического интерфейса
возможность запрограммировать обработку конкретного класса событий в от-
дельном методе. Почти все основные типы событий реализованы в виде отдель-
ного класса. Например, события для движений и нажатий клавиш мышки име-
ют класс QMouseEvent, события для нажатий клавиш клавиатуры имеют класс
QKeyEvent
и т. п. В таблице 14.1 приведены события, которые часто необходимо
обрабатывать при разработке программ с графическим интерфейсом.
Таблица 14.1: Часто употребляемые классы событий и их обработчики
Название класса
события
Описание
Обработчик события
QMouseEvent
Событие для движений мышкой и на-
жатия клавиш мышки. Посылается
виджетам. Выполняется только при
нажатии клавиши мышки. Для то-
го, чтобы виджет постоянно отсле-
живал этот тип событий, необходи-
мо передать true в метод виджета
setMouseTracking()
.
клавиша мышки нажата
QWidget::mousePressEvent()
клавишу мышки отпустили
QWidget::mouseReleaseEvent()
клавишу мышки нажали два
раза
QWidget::mouseDoubleClickEvent()
курсор мышки изменил позицию
QWidget::mouseMoveEvent()
QKeyEvent
Событие для нажатия клавиш клави-
атуры
клавиша нажата
QWidget::keyPressEvent()
клавишу отпустили
QWidget::keyReleaseEvent()
QResizeEvent
Сообщает об изменении размера ви-
джета (изменение уже произошло)
QWidget::resizeEvent()
QPaintEvent
Сообщает о необходимости перерисов-
ки виджета
QWidget::paintEvent()
QTimerEvent
Посылается через заданные интерва-
лы времени объектом, который запу-
стил один или несколько таймеров с
помощью метода
QObject::startTimer()
.
Каждый таймер имеет уникальный
идентификатор, который возвращает
метод
QObject::startTimer()
при созда-
нии нового таймера. Таймер можно
остановить с помощью вызова метода
QObject::killTimer()
.
QObject::timerEvent()
QCloseEvent
Посылается окну, которое пользова-
тель пытается закрыть. Позволяет
контролировать закрыто окно после
обработки события или нет.
QWidget::closeEvent()
Таким образом, для того, чтобы выполнить обработку события, необходи-
мо переопределить нужный обработчик события, выполнить необходимые для
обработки действия и, если необходимо, сохранить стандартное поведение для
обработчика — вызвать обработчика события из родительского класса. Теперь
вернёмся к одному из предыдущих примеров — собственному виджету для поля
ввода с пиктограммой. После изменения размера окна (и поля ввода, которое бы-
ло размещено в компоновке), нам необходимо обновить позицию значка для того,
Программирование на языке С++ в среде Qt Creator


14.4. Фильтры событий (Event filters)
385
чтобы она всегда находилась в правом конце поля ввода. Для этого мы можем пе-
реопределить обработчик события QResizeEvent для класса IconizedLineEdit:
//Событие изменения размера виджета
void I c o n i z e d L i n e E d i t : : r e s i z e E v e n t ( QResizeEvent ∗ pEvent )
{
//Если изменение размера состоялось, обновить позицию и размер пиктограммы
u p d a t e I c o n P o s i t i o n A n d S i z e ( ) ;
QWidget : : r e s i z e E v e n t ( pEvent ) ;
}
Для обновления позиции пиктограммы достаточно ещё раз вызвать метод
IconizedLineEdit::updateIconPositionAndSize()
. После изменения размера поля ввода пози-
ция пиктограммы будет автоматически обновлена.
14.4
Фильтры событий (Event filters). Распространение
(всплытие) событий (Event propagation)
Когда цикл обработки посылает событие объекту-адресату, он ожидает, что
объект соответствующим образом обработает событие или сообщит о том, что
он не будет выполнять обработку. Во втором случае некоторые события могут
быть распространены (propagated), то есть переданы на обработку к родитель-
скому объекту, если дочерний объект проигнорировал событие. Примером собы-
тий, для которых работает распространение — это события мышки и нажатий
клавиш клавиатуры. Они будут «всплывать» по объектной иерархии от дочерне-
го объекта к родительскому, пока один из этих объектов не обработает событие
или все не проигнорируют его.
Для управления этим процессом используют методы QEvent::accept() (для
обозначения события как обработанного) и QEvent::ignore() (для игнориро-
вания события). Их используют только в виртуальных методах-обработчиках.
Обычно QEvent::accept() явно не вызывают, поскольку большинство распро-
страняемых событий обозначаются как обработанные по умолчанию.
Несмотря на гибкую систему контроля обработки событий, иногда возникает
потребность выполнить обработку вместо объекта-адресата. Также иногда возни-
кает необходимость заблокировать (отфильтровать) некоторые события, которые
поступают на обработку к объекту. Этого можно достичь с помощью фильтров
событий
(event filters).
Фильтры событий являются обычными объектами, унаследованными от
QObject
. Но перед тем, как событие поступит к адресату, оно поступает к филь-
тру событий. Он может передать его дальше на обработку адресату, отсеять
или выполнить необходимые действия в ответ. Для обработки событий, филь-
тру необходимо переопределить виртуальный метод QObject::eventFilter().
Этот метод возвращает логическое значение, которое означает, будет ли событие
отфильтровано (значение true) или поступит на дальнейшую обработку (зна-
чение false). Фильтр событий для объекта можно задать с помощью метода
QObject::installEventFilter()
, который принимает указатель на QObject, вы-
ступающий в роли фильтра.
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


386
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   172   173   174   175   176   177   178   179   ...   193




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish