47 void Ticker::hideEvent(QHideEvent * /* event */)
48 {
49 killTimer(myTimerId);
50 }
Функция
События таймера являются низкоуровневыми событиями, и если нам необходимо иметь несколько таймеров, это может усложнить отслеживание всех идентификаторов таймеров. В таких ситуациях обычно легче создавать для каждого таймера объект
Установка фильтров событий
Одним из действительно эффективных средств в модели событий Qt является возможность с помощью некоторого экземпляра объекта
Предположим, что наш виджет
01 void MyLineEdit::keyPressEvent(QKeyEvent *event)
02 {
03 if (event->key()== Qt::Key_Space) {
04 focusNextChild();
05 } else {
06 QLineEdit::keyPressEvent(event);
07 }
08 }
Этот подход имеет один основной недостаток: если мы используем в форме несколько различных видов виджетов (например,
1. Зарегистрируйте объект—перехватчик с целевым объектом посредством вызова функции
2. Выполните обработку событий целевого объекта в функции
Регистрацию объекта контроля удобно выполнять в конструкторе
01 CustomerInfoDialog::CustomerInfoDialog(QWidget *parent)
02 : QDialog(parent)
03 {
04 firstNameEdit->installEventFilter(this);
05 lastNameEdit->installEventFilter(this);
06 cityEdit->installEventFilter(this);
07 phoneNumberEdit->installEvehtFilter(this);
08 }
После регистрации фильтра события те из них, которые посылаются виджетам
Ниже приводится функция
01 bool CustomerInfoDialog::eventFilter(QObject *target, QEvent *event)
02 {
03 if (target == firstNameEdit || target == lastNameEdit
04 || target == cityEdit || target == phoneNumberEdit) {
05 if (event->type() == QEvent::KeyPress) {
06 QKeyEvent *keyEvent = static_cast
07 if (keyEvent->key() == Qt::Key_Space) {
08 focusNextChild();
09 return true;
10 }
11 }
12 }