На этом шаге рассмотрим классы 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. Деление объекта точки на 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, можно взять здесь.
На следующем шаге рассмотрим следующий класс геометрии - двумерный размер.