На этом шаге рассмотрим классы QSize и QSizeF.
Классы QSize и QSizeF служат для хранения целочисленных и вещественных размеров. Оба класса обладают одинаковыми интерфейсами. Структура очень похожа на QPoint, т. к. хранит две величины, над которыми можно проводить операции сложения/вычитания и умножения/деления.
Классы QSize и QSizeF, как и классы QPoint, QPointF, предоставляют операторы сравнения ==, != и метод isNull(), возвращающий значение true в том случае, если высота и ширина равны нулю.
Для получения ширины и высоты вызываются методы width() и height(). Изменить эти параметры можно с помощью методов setWidth() и setHeight(). При помощи методов rwidth() и rheight() получают ссылки на значения ширины и высоты. Например:
QSize size(10, 20);
int n = size.rwidth()++; // n = 11; size = (11, 20)
Помимо них класс предоставляет метод scale(), позволяющий изменять размеры оригинала согласно переданному в первом параметре размеру. Второй параметр этого метода управляет способом изменения размера (рис. 1 - 3), а именно:
Рис.1. Изменение размера оригинала с параметром Qt::IgnoreAspectRatio
QSize size1(150, 160);
size1.scale(300, 100, Qt::IgnoreAspectRatio); // => (300, 100)
Рис.2. Изменение размера оригинала с параметром Qt::KeepAspectRatio
QSize size1(150, 160);
size1.scale(300, 100, Qt::KeepAspectRatio); // => (93, 100)
Рис.3. Изменение размера оригинала с параметром Qt::KeepAspectRatioByExpanding
QSize size1(150, 160);
size1.scale(300, 100, Qt::KeepAspectRatioByExpanding); // => (300, 320)
Файлы приложения, иллюстрирующего изменение размера оригинала, можно взять здесь.
На следующем шаге рассмотрим следующий класс геометрии - прямоугольник.