Класс QRect: координаты и размеры прямоугольной области

Класс QRect описывает координаты и размеры прямоугольной области. Для создания экземпляра класса предназначены следующие форматы конструктора:

// #include <QRect>
QRect()
QRect(int x, int y, int width, int height)
QRect(const QPoint &topLeft, const QSize &size)
QRect(const QPoint &topLeft, const QPoint &bottomRight)

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

QRect r;
qDebug() << r.left() << r.top() << r.right()
         << r.bottom() << r.width() << r.height(); // 0 0 -1 -1 0 0

Второй и третий конструкторы позволяют указать координаты левого верхнего угла и размеры области. Во втором конструкторе значения указываются отдельно:

QRect r(10, 15, 400, 300);
qDebug() << r.left() << r.top() << r.right()
         << r.bottom() << r.width() << r.height();
// 10 15 409 314 400 300

В третьем конструкторе координаты задаются с помощью класса QPoint, а размеры — с помощью класса QSize:

QRect r(QPoint(10, 15), QSize(400, 300));
qDebug() << r.left() << r.top() << r.right()
         << r.bottom() << r.width() << r.height();
// 10 15 409 314 400 300

Четвертый конструктор позволяет указать координаты левого верхнего угла и правого нижнего угла. В качестве значений указываются экземпляры класса QPoint:

QRect r(QPoint(10, 15), QPoint(409, 314));
qDebug() << r.left() << r.top() << r.right()
         << r.bottom() << r.width() << r.height();
// 10 15 409 314 400 300

Пример создания копии объекта:

QRect r(10, 15, 400, 300);
QRect r2(r);
qDebug() << r2; // QRect(10,15 400x300)

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

  • setLeft(), setX(), setTop() и setY() — задают координаты левого верхнего угла по осям X и Y. Прототипы методов:
void setLeft(int x)
void setX(int x)
void setTop(int y)
void setY(int y)

Пример:

QRect r;
r.setLeft(10);
r.setTop(55);
qDebug() << r; // QRect(10,55 -10x-55)
r.setX(12);
r.setY(81);
qDebug() << r; // QRect(12,81 -12x-81)
  • setRight() и setBottom() — задают координаты правого нижнего угла по осям X и Y. Прототипы методов:
void setRight(int x)
void setBottom(int y)

Пример:

QRect r;
r.setRight(12);
r.setBottom(81);
qDebug() << r; // QRect(0,0 13x82)
  • setTopLeft() — задает координаты левого верхнего угла. Прототип метода:
void setTopLeft(const QPoint &position)
  • setTopRight() — задает координаты правого верхнего угла. Прототип метода:
void setTopRight(const QPoint &position)
  • setBottomLeft() — задает координаты левого нижнего угла. Прототип метода:
void setBottomLeft(const QPoint &position)
  • setBottomRight() — задает координаты правого нижнего угла. Прототип метода:
void setBottomRight(const QPoint &position)

Пример:

QRect r;
r.setTopLeft(QPoint(10, 5));
r.setBottomRight(QPoint(39, 19));
qDebug() << r; // QRect(10,5 30x15)
r.setTopRight(QPoint(39, 5));
r.setBottomLeft(QPoint(10, 19));
qDebug() << r; // QRect(10,5 30x15)
  • setWidth(), setHeight() и setSize() — задают ширину и высоту области. Прототипы методов:
void setWidth(int width)
void setHeight(int height)
void setSize(const QSize &size)
  • setRect() — задает координаты левого верхнего угла и размеры области. Прототип метода:
void setRect(int x, int y, int width, int height)
  • setCoords() — задает координаты левого верхнего угла и правого нижнего угла. Прототип метода:
void setCoords(int x1, int y1, int x2, int y2)

Пример:

QRect r;
r.setRect(10, 10, 100, 500);
qDebug() << r; // QRect(10,10 100x500)
r.setCoords(10, 10, 109, 509);
qDebug() << r; // QRect(10,10 100x500)

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

  • moveTo(), moveLeft() и moveTop() — перемещают координаты левого верхнего угла. Прототипы методов:
void moveTo(int x, int y)
void moveTo(const QPoint &position)
void moveLeft(int x)
void moveTop(int y)

Пример:

QRect r(10, 15, 400, 300);
r.moveTo(0, 0);
qDebug() << r; // QRect(0,0 400x300)
r.moveTo(QPoint(10, 10));
qDebug() << r; // QRect(10,10 400x300)
r.moveLeft(5);
r.moveTop(0);
qDebug() << r; // QRect(5,0 400x300)
  • moveRight() и moveBottom() — перемещают координаты правого нижнего угла. Прототипы методов:
void moveRight(int x)
void moveBottom(int y)
  • moveTopLeft() — перемещает координаты левого верхнего угла. Прототип метода:
void moveTopLeft(const QPoint &position)
  • moveTopRight() — перемещает координаты правого верхнего угла. Прототип метода:
void moveTopRight(const QPoint &position)
  • moveBottomLeft() — перемещает координаты левого нижнего угла. Прототип метода:
void moveBottomLeft(const QPoint &position)
  • moveBottomRight() — перемещает координаты правого нижнего угла. Прототип метода:
void moveBottomRight(const QPoint &position)

Пример:

QRect r(10, 15, 400, 300);
r.moveTopLeft(QPoint(0, 0));
qDebug() << r; // QRect(0,0 400x300)
r.moveBottomRight(QPoint(599, 499));
qDebug() << r; // QRect(200,200 400x300)
  • moveCenter() — перемещает координаты центра. Прототип метода:
void moveCenter(const QPoint &position)
  • translate() — перемещает координаты левого верхнего угла относительно текущего значения координат. Прототипы метода:
void translate(int dx, int dy)
void translate(const QPoint &offset)

Пример:

QRect r(0, 0, 400, 300);
r.translate(20, 15);
qDebug() << r; // QRect(20,15 400x300)
r.translate(QPoint(10, 5));
qDebug() << r; // QRect(30,20 400x300)
  • translated() — метод аналогичен методу translate(), но возвращает новый экземпляр класса QRect, а не изменяет текущий. Прототипы метода:
QRect translated(int dx, int dy) const
QRect translated(const QPoint &offset) const
  • adjust() — сдвигает координаты левого верхнего угла и правого нижнего угла относительно текущих значений координат. Прототип метода:
void adjust(int dx1, int dy1, int dx2, int dy2)

Пример:

QRect r(0, 0, 400, 300);
r.adjust(10, 5, 10, 5);
qDebug() << r; // QRect(10,5 400x300)
  • adjusted() — метод аналогичен методу adjust(), но возвращает новый экземпляр класса QRect, а не изменяет текущий. Прототип метода:
QRect adjusted(int dx1, int dy1, int dx2, int dy2) const

Для получения значений предназначены следующие методы:

  • left() и x() — возвращают координату левого верхнего угла по оси X. Прототипы методов:
int left() const
int x() const
  • top() и y() — возвращают координату левого верхнего угла по оси Y. Прототипы методов:
int top() const
int y() const
  • right() и bottom() — возвращают координаты правого нижнего угла по осям X и Y соответственно. Прототипы методов:
int right() const
int bottom() const
  • width() и height() — возвращают ширину и высоту соответственно. Прототипы методов:
int width() const
int height() const
  • size() — возвращает размеры в виде экземпляра класса QSize. Прототип метода:
QSize size() const

Пример:

QRect r(10, 15, 400, 300);
qDebug() << r.left() << r.top() << r.x() << r.y()
         << r.right() << r.bottom();
// 10 15 10 15 409 314
qDebug() << r.width() << r.height() << r.size();
// 400 300 QSize(400, 300)
  • topLeft() — возвращает координаты левого верхнего угла. Прототип метода:
QPoint topLeft() const
  • topRight() — возвращает координаты правого верхнего угла. Прототип метода:
QPoint topRight() const
  • bottomLeft() — возвращает координаты левого нижнего угла. Прототип метода:
QPoint bottomLeft() const
  • bottomRight() — возвращает координаты правого нижнего угла. Прототип метода:
QPoint bottomRight() const

Пример:

QRect r(10, 15, 400, 300);
qDebug() << r.topLeft() << r.topRight();
// QPoint(10,15) QPoint(409,15)
qDebug() << r.bottomLeft() << r.bottomRight();
// QPoint(10,314) QPoint(409,314)
  • center() — возвращает координаты центра области. Прототип метода:
QPoint center() const

Например, вывести окно по центру доступной области экрана можно так:

QScreen *screen = QApplication::primaryScreen();
QRect rect = screen->availableGeometry();
window.move(rect.center() - window.rect().center());
  • getRect() — позволяет получить координаты левого верхнего угла и размеры области. Прототип метода:
void getRect(int *x, int *y, int *width, int *height) const
  • getCoords() — позволяет получить координаты левого верхнего угла и правого нижнего угла.
void getCoords(int *x1, int *y1, int *x2, int *y2) const

Прочие методы:

  • isNull() — возвращает true, если ширина и высота равны нулю, и false — в противном случае. Прототип метода:
bool isNull() const
  • isValid() — возвращает true, если left() <= right() и top() <= bottom(), и false — в противном случае. Прототип метода:
bool isValid() const
  • isEmpty() — возвращает true, если left() > right() или top() > bottom(), и false — в противном случае. Прототип метода:
bool isEmpty() const
  • normalized() — исправляет ситуацию, при которой left() > right() или top() > bottom() и возвращает новый экземпляр класса QRect.
QRect normalized() const

Пример:

QRect r(QPoint(409, 314), QPoint(10, 15));
qDebug() << r;              // QRect(409,314 -398x-298)
qDebug() << r.normalized(); // QRect(11,16 398x298)
  • contains() — возвращает true, если точка с указанными координатами расположена внутри области или на ее границе, и false — в противном случае. Если в параметре proper указано значение true, то точка должна быть расположена только внутри области, а не на ее границе. Значение параметра по умолчанию — false. Прототипы метода:
bool contains(int x, int y) const
bool contains(int x, int y, bool proper) const
bool contains(const QPoint &point, bool proper = false) const

Пример:

QRect r(0, 0, 400, 300);
qDebug() << r.contains(0, 10);       // true
qDebug() << r.contains(0, 10, true); // false
  • contains() — возвращает true, если указанная область расположена внутри текущей области или на ее краю, и false — в противном случае. Если в параметре proper указано значение true, то указанная область должна быть расположена только внутри текущей области, а не на ее краю. Значение параметра по умолчанию — false. Прототип метода:
bool contains(const QRect &rectangle, bool proper = false) const

Пример:

QRect r(0, 0, 400, 300);
qDebug() << r.contains(QRect(0, 0, 20, 5));       // true
qDebug() << r.contains(QRect(0, 0, 20, 5), true); // false
  • intersects() — возвращает true, если указанная область пересекается с текущей областью, и false — в противном случае. Прототип метода:
bool intersects(const QRect &rectangle) const
  • intersected() — возвращает область, которая расположена на пересечении текущей и указанной областей. Прототип метода:
QRect intersected(const QRect &rectangle) const

Пример:

QRect r(0, 0, 20, 20);
qDebug() << r.intersects(QRect(10, 10, 20, 20));
// true
qDebug() << r.intersected(QRect(10, 10, 20, 20));
// QRect(10,10 10x10)
  • united() — возвращает область, которая охватывает текущую и указанную области. Прототип метода:
QRect united(const QRect &rectangle) const

Пример:

QRect r(0, 0, 20, 20);
qDebug() << r.united(QRect(30, 30, 20, 20)); // QRect(0,0 50x50)

Над двумя экземплярами класса QRect определены операции & и &= (пересечение), | и |= (объединение), == и !=. Пример:

QRect r1(0, 0, 20, 20), r2(10, 10, 20, 20);
qDebug() << (r1 & r2);  // QRect(10,10 10x10)
qDebug() << (r1 | r2);  // QRect(0,0 30x30)
qDebug() << (r1 == r2); // false
qDebug() << (r1 != r2); // true

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

Помощь сайту

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

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