На этом шаге мы рассмотрим методы, используемые для создания таких событий.
Для создания искусственных событий применяются следующие статические методы из класса QCoreApplication:
В параметре <QObject> указывается ссылка на объект, которому посылается событие, а в параметре <QEvent> - объект события. Последний может быть экземпляром как стандартного (например, QMouseEvent), так и пользовательского класса, являющегося наследником класса QEvent. Пример отправки события QEvent.MouseButtonPress компоненту label:
е = QtGui.QMouseEvent (QtCore.QEvent.MouseButtonPress, QtCore.QPointF(5, 5), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier) QtCore.QCoreApplication.sendEvent(self.label, e)
Для отправки пользовательского события необходимо создать класс, наследующий QEvent. В этом классе следует зарегистрировать пользовательское событие с помощью статического метода registerEventType() и сохранить идентификатор события в атрибуте класса. Пример:
class MyEvent (QtCore.QEvent): idType = QtCore.QEvent.registerEventType() def __init__(self, data): QtCore.QEvent.__init__(self, MyEvent.idType) self.data = data def get_data(self): return self.data
Пример отправки события класса MyEvent компоненту label:
QtCore.QCoreApplication.sendEvent(self.label, MyEvent("512"))
Обработать пользовательское событие можно с помощью методов event(self, <event>) или customEvent(self, <event>). Пример:
def customEvent (self, e): if e.type() == MyEvent.idType: self.setText ("Получены данные: {0}".format(e.get_data()))
Со следующего шага мы начнем рассматривать размещение компонентов в окнах.