Шаг 184.
Библиотека Qt.
Классы геометрии. Точка

    На этом шаге рассмотрим классы QPoint и QPointF.

    Группа классов геометрии ничего не отображает на экране. Основное их назначение состоит в задании расположения, размеров и в описании формы объектов.

    Для задания точек в двумерной системе координат служат два класса: QPoint и QPointF. В двумерной системе координат точка обозначается парой чисел X и Y, где X — горизонтальная, а Y — вертикальная координаты.

    В отличие от обычного расположения координатных осей, при задании координат точки в Qt обычно подразумевается, что ось Y смотрит вниз (рис. 1).

    Класс QPoint описывает точку с целочисленными координатами, а QPointF — с вещественными. Интерфейс обоих классов одинаков, в него входят методы, позволяющие проводить различные операции с координатами, например сложение и вычитание с координатами другой точки. При сложении/вычитании точек выполняется попарное сложение/вычитание их координат X и Y. Пример, показанный на рис. 1, складывает две точки: pt1 и pt2.


Рис.1. Создание и сложение точек

QPoint pt1(4, 2);
QPoint pt2(3, 4);
QPoint pt3; //(0, 0)
pt3 = pt1 + pt2; //(7, 6)

    Объекты точек можно умножать (рис. 2)


Рис.2. Умножение объекта точки на 2

и делить (рис. 3) на числа.


Рис.3. Деление объекта точки на 2

Например:

QPoint pt1(4, 2);
QPoint pt4 = pt1;
pt4 *= 2; // pt4 = (8, 4)

QPoint pt2(3, 4);
QPoint pt5 = pt2;
pt5 /= 2; // pt5 = (1.5, 2)

    Для получения координат точки (X, Y) реализованы методы x() и y() соответственно. Изменяются координаты точки с помощью методов setX() и setY().

    Можно получать ссылки на координаты точки, для того чтобы изменять их значения (рис. 4).


Рис.4. Изменение значений координат точки

Например:

QPoint pt1(4, 2);
pt1.rx() -= 2;
pt1.ry() +=2; // pt1 = (2, 4)

    Объекты точек можно сравнивать друг с другом при помощи операторов == (равно) и != (не равно). Например:

QPoint pt1(10, 20);
QPoint pt2(10, 20);
bool b = (pt1 == pt2); // b = true 

    Если необходимо проверить, равны ли координаты X и Y нулю, то вызывается метод isNull(). Например:

QPoint pt; // (0, 0)
bool b = pt.isNull(); // b = true 

    Метод manhattanLength() возвращает сумму абсолютных значений координат X и Y. Например:

QPoint pt(10, 20);
int n = pt.manhattanLength(); // n = 10 + 20 = 30

    Возвращаемое значение является грубым приближением к . Этот метод был назван в честь улиц Манхэттена, расположенных перпендикулярно друг к другу.

    Файлы приложения, иллюстрирующего работу с объектами классов QPoint и QPointF, можно взять здесь.

    На следующем шаге рассмотрим следующий класс геометрии - двумерный размер.




Предыдущий шаг Содержание Следующий шаг