Изменение положения окна и его размеров

При перемещении окна и изменении размеров вызываются следующие методы:

  • moveEvent() — вызывается непрерывно при перемещении окна. Через параметр доступен экземпляр класса QMoveEvent. Прототип метода:
virtual void moveEvent(QMoveEvent *event)

Получить координаты окна позволяют следующие методы из класса QMoveEvent:

  • pos() — возвращает экземпляр класса QPoint с текущими координатами;
  • oldPos() — возвращает экземпляр класса QPoint с предыдущими координатами.

Прототипы методов:

const QPoint &pos() const
const QPoint &oldPos() const
  • resizeEvent() — вызывается непрерывно при изменении размеров окна. Через параметр доступен экземпляр класса QResizeEvent. Прототип метода:
virtual void resizeEvent(QResizeEvent *event)

Получить размеры окна позволяют следующие методы из класса QResizeEvent:

  • size() — возвращает экземпляр класса QSize с текущими размерами;
  • oldSize() — возвращает экземпляр класса QSize с предыдущими размерами.

Прототипы методов:

const QSize &size() const
const QSize &oldSize() const

Рассмотрим пример обработки изменения положения окна и его размеров. Содержимое файла widget.h приведено в листинге 4.24, файла widget.cpp — в листинге 4.25, а файла main.cpp — в листинге 4.26.

Листинг 4.24. Содержимое файла widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QApplication>
#include <QWidget>
#include <QMoveEvent>
#include <QResizeEvent>

class Widget : public QWidget
{
   Q_OBJECT

public:
   Widget(QWidget *parent=nullptr);
   ~Widget();
protected:
   void moveEvent(QMoveEvent *e) override;
   void resizeEvent(QResizeEvent *e) override;
};
#endif // WIDGET_H

Листинг 4.25. Содержимое файла widget.cpp

#include "widget.h"

Widget::Widget(QWidget *parent)
   : QWidget(parent)
{}

void Widget::moveEvent(QMoveEvent *e)
{
   qDebug() << "moveEvent" << e->pos().x() << e->pos().y();
   QWidget::moveEvent(e);
}

void Widget::resizeEvent(QResizeEvent *e)
{
   qDebug() << "resizeEvent"
            << e->size().width() << e->size().height();
   QWidget::resizeEvent(e);
}

Widget::~Widget() {}

Листинг 4.26. Содержимое файла main.cpp

#include "widget.h"

int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   Widget window;
   window.setWindowTitle("Изменение положения окна и его размеров");
   window.resize(350, 100);
   window.show();
   return app.exec();
}

Учебник C++ (Qt Creator и MinGW)
Учебник C++ (Qt Creator и MinGW) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов