Глава 14. Создание элементов графического интерфейса
• события направляются на обработку объектам, участвующим в работе про-
граммы. За сбор и перенаправление событий к обработчикам ответствен-
ным является цикл обработки событий в программе;
• каждое событие существует в виде объекта типа QEvent. Для большинства
событий существуют специализированные классы этих событий, унаследо-
ванные от QEvent, которые содержат информацию о событии и данные необ-
ходимые для её корректной обработки;
• для участия в обработке событий объект должен быть унаследован от клас-
са QObject. События, которые поступают к объекту на обработку, автома-
тически передаются к виртуальному методу QObject::event();
• для удобства, для большинства событий существуют отдельные вирту-
альные методы обработки, которые вызываются виртуальным методом
QObject::event();
• объекты имеют возможность быть фильтрами событий для других объек-
тов в приложении. Для того, чтобы установить объект в качестве филь-
тра событий, пользуются методом installEventFilter(). Объект-фильтр
должен переопределить виртуальный метод QObject::eventFilter(), ко-
торый возвращает логическое значение, было событие отфильтровано (то
есть, оно не будет направляться на обработку) или нет.
А вот общий алгоритм для программной обработки событий:
• в случае, когда нет возможности унаследовать класс объекта и переопреде-
лить методы обработки, а также в случае, когда необходимо фильтровать,
блокировать или предварительно обработать событие перед тем, как она
будет отправлена на обработку к объекту — воспользуйтесь фильтром со-
бытий
–
переопределите виртуальный метод QObject::eventFilter() для объ-
екта, который будет выступать в роли фильтра событий;
–
в методе eventFilter() проверьте объект к которому на обработку
будет направляться событие;
–
дальше, определите тип события (QEvent::Type) и класс события, про-
верьте является ли полученное событие событием нужного вам типа;
–
приведите объект события до нужного вам класса событий;
–
выполните предварительную обработку события, если необходимо.
Для того, чтобы отфильтровать событие (после этого оно не будет пе-
редаваться объекту на обработку) верните из метода логическое зна-
чение true. Для того, чтобы отправить событие на обработку объекту-
адресату верните логическое значение false.
• для некоторых типов событий, которые не имеют отдельного метода-
обработчика, обработку можно запрограммировать, переопределив метод
QObject::event()
–
переопределите виртуальный метод для объекта QObject::event(),
который должен выполнять обработку;
–
определите тип события (QEvent::Type) и класс события, проверьте
является ли полученное событие событием нужного вам типа;
Программирование на языке С++ в среде Qt Creator
14.5. Создание собственного элемента интерфейса
389
–
приведите объект события до нужного вам класса событий;
–
выполните обработку или вызовите метод, который её выполнит, вер-
ните значение true, которое означает, что событие распознано и обра-
ботано, или false в случае, если объект не будет выполнять обработку.
В этом случае событие может быть переслано на обработку родитель-
скому объекту.
–
вызовите метод event() для базового класса, чтобы провести обработ-
ку всех остальных видов событий. Верните из метода значение, которое
вернёт метод event() базового класса после выполнения.
• если объект имеет виртуальный метод-обработчик события, используйте
его
–
переопределите виртуальный метод для объекта QObject::event(),
который должен выполнять обработку;
–
выполните обработку события. Вызовите метод accept() для события,
если во время обработки убедились, что событие должно быть прора-
ботано данным объектом. В противном случае, вызовите ignore() для
объекта события (в этом случае событие может быть направлено к ро-
дительскому объекту на обработку).
14.5
Создание собственного элемента интерфейса.
Создание свойств
QObject
предоставляет механизм для объявления свойств. Свойства — это
специальные общедоступные поля, через которые можно получить доступ к дан-
ным объекта. Свойства обычно имеют методы для установки и получения значе-
ния, вызываемые при чтении из свойства и записи данных. В Qt свойства выпол-
няют специальную роль, ведь делают доступными для метаобъектной системы
способы чтения и записи данных объектов, что часто используется в Qt для
реализации различных механизмов (анимации, описание динамических пользо-
вательских интерфейсов в QtQuick, и т. д.).
Определение свойства обычно состоит из макроса Q_PROPERTY, который опи-
сывает свойство и содержит описания:
• метода для установки начального значения;
• метода для получения значения;
• метода для установки значения;
• сигнала об изменении значения свойства;
• дополнительных настроек.
Метод для установки значения принимает одно значение (того же типа, что
и свойство) и возвращает void. Метод для получения значения возвращает зна-
чение свойства.
Обычно метод для получения значения называют так же как и свойство, а
метод для установки значения ещё и имеет префикс «set». Метод для получе-
ния значения, который возвращает тип bool также обычно имеет префикс «is»,
например:
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.
390
Do'stlaringiz bilan baham: |