Остальные классы событий

   
На этом шаге рассмотрим остальные классы событий.

   
Класс QChildEvent

   
Это событие происходит в момент создания или удаления объекта-потомка. Объект события передается в метод childEvent(), который определен в классе QObject.

   
Вызовом метода QChildEvent::child() можно получить указатель на этот объект. При помощи методов QChildEvent::added() и QChildEvent::removed() можно узнать о создании и удалении объекта-потомка.

   
Класс QCloseEvent

   
Событие класса QCloseEvent создается при закрытии окна виджета. Оно может быть вызвано пользователем или методом QWidget::close(). Объект класса QCloseEvent передается в метод closeEvent(), в котором можно спросить пользователя, действительно ли он хочет закрыть приложение. Это имеет смысл в тех случаях, когда пользователь не сохранил свои данные.

   
При помощи методов accept() и ignore() устанавливается флаг, сообщающий о согласии получателя события закрыть окно. Вызов accept() приведет к тому, что после возвращения из этого метода окно будет спрятано методом hide(). Вызов ignore() оставит окно без изменений.

   
Класс QHideEvent

   
Данное событие создается при нажатии пользователем кнопки свертывания приложения. Также, это событие может быть вызвано методом hide(), делающим виджет невидимым. Объект события класса QHideEvent передается в метод hideEvent().

   
Класс QMoveEvent

   
Событие класса QMoveEvent возникает при перемещении виджета. Для виджетов верхнего уровня это соответствует перемещению его окна. Объект события класса QMoveEvent передается в метод moveEvent() и содержит информацию о старых и новых координатах виджета, которые можно получить вызовом методов pos() и oldPos().

   
Класс QShowEvent

   
Событие генерируется при создании виджета и при вызове метода show(). Объект события QShowEvent передается в метод showEvent().

   
Класс QResizeEvent

   
Пользователь может изменять размеры окна при помощи мыши. При этом создается объект события QResizeEvent. Объект передается в метод resizeEvent() и содержит информацию о старых и новых размерах виджета, которые можно получить вызовом методов size() и oldSize().

   
Реакции на изменение размеров виджета могут быть следующими:

  • перерисовка содержимого окна;
  • изменение размеров виджетов-потомков.

   
Пример, показанный на рис. 1, демонстрирует перезапись методов resizeEvent(), showEvent(), moveEvent(), hideEvent(), closeEvent(). В окне отображается:

  • информация о создании виджета надписи, которая выводится при запуске приложения или при восстановлении окна после сворачивания его на панель задач;
  • информация о текущей ширине и высоте окна, которая обновляется при изменении его размера;
  • информация о текущих координатах x и y верхнего левого угла окна, которая обновляется при его перемещении;
  • в новом окне выводится соответствующая информация, если окно приложения будет свернуто на панель задач;
  • в новом окне выводится соответствующая информация, если окно приложения будет закрыто.


Рис.1. Пример изменения размера окна

   
Приведем текст программы, результат работы которой представлен на рисунке 1.

class DemoEvent : public QLabel {
public:
 //в конструкторе объекта устанавливается позиционирование текста по центру
    DemoEvent(QWidget* pwgt = 0) : QLabel(pwgt)
    {
        setAlignment(Qt::AlignCenter);
    }
protected:
 //событие изменение размера виджета
    virtual void resizeEvent(QResizeEvent* pe)
    {
        //выводим в надпись информацию о текущих размерах окна
        setText(QString("Изменение размера окна")
             + "\nШирина = " + QString::number(pe->size().width())
             + "\nВысота = " + QString::number(pe->size().height())
            );
    }
 //событие перемещения виджета
    virtual void moveEvent(QMoveEvent *me)
    {
       //выводим в надпись информацию о позиции верхнего левого угла окна
       setText(QString("Перемещение окна")
            + "\nКоордината  x =" + QString::number(me->pos().x())
            + "\nКоордината  y =" + QString::number(me->pos().y())
           );
    }
 //событие отображения виджета
    virtual void showEvent(QShowEvent *)
    {
       //выводим в надпись текст
       setText(QString("Создали виджет надписи"));
    }
 //событие свертывания приложения
    virtual void hideEvent(QHideEvent *)
    {
       //создаем новый виджет надписи и выводим сообщение о событии
       QLabel *l = new QLabel("Окно свернули на панель задач");
       l->resize(250,50);
       l->show();
    }
 //событие закрытия окна виджета
    virtual void closeEvent(QCloseEvent *)
    {
       //создаем новый виджет надписи и выводим сообщение о событии
       QLabel *l = new QLabel("Окно закрыли");
       l->>resize(250,50);
       l->show();
    }
};

   
Файлы приложения можно взять Предыдущий шаг
Содержание
Следующий шаг



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий