QPoint
QPoint
类封装了我们常用用到的坐标点 (x, y), 常用的 API如下:
void QPoint::setX(int x);
void QPoint::setY(int y);
int QPoint::x() const;
int &QPoint::rx();
int QPoint::y() const;
int &QPoint::ry();
//如果x和y坐标都为0则返回true,否则返回false
bool isNull() const
//返回x()和y()的绝对值之和,传统上称为从原点到该点的向量的“曼哈顿长度”。
int manhattanLength() const
//返回一个交换了x和y坐标的点: QPoint{1, 2}.transposed() // {2, 1}
QPoint transposed() const
// 直接通过坐标对象进行算术运算: 加减乘除
QPoint &QPoint::operator*=(float factor);
QPoint &QPoint::operator*=(double factor);
QPoint &QPoint::operator*=(int factor);
QPoint &QPoint::operator+=(const QPoint &point);
QPoint &QPoint::operator-=(const QPoint &point);
QPoint &QPoint::operator/=(qreal divisor);
常用基本函数的使用
QPoint point(2, 3);
qInfo() << point.x() << point.y(); // 2 3
point.rx() = 100;
point.ry() = 100;
qInfo() << point.x() << point.y(); // 100 100
point.setX(200);
point.setY(300);
qInfo() << point.x() << point.y(); // 200 300
//坐标变换
QPoint point(2, 3);
qInfo() << point; // QPoint(2, 3)
qInfo() << point.transposed(); // QPoint(3, 2)
QPoint p1(2, 2);
QPoint p2(4, 5);
//求曼哈顿距离
qInfo() << p1.manhattanLength(); // 4
//求两点之间的曼哈顿距离
qInfo() << (p1 - p2).manhattanLength(); // 5
QLine
QLine
是一个直线类, 封装了两个坐标点 (两点确定一条直线
),常用API如下:
// 设置直线的起点坐标
void setP1(const QPoint &p1);
// 设置直线的终点坐标
void setP2(const QPoint &p2);
void setPoints(const QPoint &p1, const QPoint &p2);
void setLine(int x1, int y1, int x2, int y2);
QPoint p1() const; // 返回直线的起始点坐标
QPoint p2() const; // 返回直线的终点坐标
QPoint center() const; // 返回值直线的中心点坐标, (p1() + p2()) / 2
int x1() const; // 返回值直线起点的 x 坐标
int y1() const; // 返回值直线起点的 y 坐标
int x2() const; // 返回值直线终点的 x 坐标
int y2() const; // 返回值直线终点的 y 坐标
int dx() const //返回直线向量的水平分量
int dy() const //返回直线向量的垂直分量
// 用给定的坐标点平移这条直线
void translate(const QPoint &offset);
void translate(int dx, int dy);
// 用给定的坐标点平移这条直线, 返回平移之后的坐标点(不会改变这条线的坐标)
QLine translated(const QPoint &offset) const;
QLine translated(int dx, int dy) const;
// 直线对象进行比较
bool operator!=(const QLine &line) const;
bool operator==(const QLine &line) const;
QLine line(0, 0, 6, 3);
qInfo() << line;
qInfo() << line.dx() << line.dy(); // 6,3 xy轴上的增量
line.translate(1, 2);
qInfo() << line; // 1,2,7,5
qInfo() << line.translated(-1, -2); // 临时的,原来的不变 0,0,6,3
qInfo() << line; // 1,2,7,5
QSize
在QT中
QSize
类用来形容长度和宽度, 常用的API如下:
void setWidth(int width)
void setHeight(int height);
int width() const; // 得到宽度
int &rwidth(); // 得到宽度的引用
int height() const; // 得到高度
int &rheight(); // 得到高度的引用
void transpose(); // 交换高度和宽度的值
QSize transposed() const; // 交换高度和宽度的值, 返回交换之后的尺寸信息
//返回一个大小,宽为当前大小与other的最小值,高为当前大小与other的最小值
QSize boundedTo(const QSize& oterSize)
//返回一个大小,宽为当前大小与other的最大值,高为当前大小与other的最大值
QSize expandedTo(const QSize &otherSize) const
/*
根据指定的模式,按给定的宽度和高度缩放矩形:
如果mode为Qt::IgnoreAspectRatio,则大小设置为(width, height)。
如果mode为Qt::KeepAspectRatio,当前大小将在内部缩放到一个尽可能大的矩形(宽度,高度),保持高宽比。
如果mode是Qt::KeepAspectRatioByExpanding,当前大小被缩放到一个矩形,尽可能小的外部(宽度,高度),保持长宽比。
*/
void scale(int width, int height, Qt::AspectRatioMode mode)
void scale(const QSize &size, Qt::AspectRatioMode mode)
QSize scaled(int width, int height, Qt::AspectRatioMode mode) const
QSize scaled(const QSize &s, Qt::AspectRatioMode mode) const
// 进行算法运算: 加减乘除
QSize &operator*=(qreal factor);
QSize &operator+=(const QSize &size);
QSize &operator-=(const QSize &size);
QSize &operator/=(qreal divisor);
QSize size(640, 480);
qInfo() << size;
qInfo() << size.transposed(); // 不改变原来的
QSize size1(640, 480);
QSize size2(960, 320);
qInfo() << size1.boundedTo(size2); // 构造一个最小的size
qInfo() << size1.expandedTo(size2); // 构造一个最大的size
//缩放 直接缩放(随意缩放)
qInfo() << QSize(250, 320).scaled(100, 100,
Qt::AspectRatioMode::IgnoreAspectRatio);
//保持宽高比最小等比缩放
qInfo() << QSize(200, 400).scaled(100, 100,
Qt::AspectRatioMode::KeepAspectRatio);
//保持宽高比最大等比缩放
qInfo() << QSize(200, 400).scaled(100, 100,
Qt::AspectRatioMode::KeepAspectRatioByExpanding);
QRect
在Qt中使用
QRect
类来描述一个矩形, 常用的API如下:
// 构造一个空对象
QRect::QRect();
// 基于左上角坐标, 和右下角坐标构造一个矩形对象
QRect::QRect(const QPoint &topLeft, const QPoint &bottomRight);
// 基于左上角坐标, 和宽度, 高度构造一个矩形对象
QRect::QRect(const QPoint &topLeft, const QSize &size);
// 通过左上角坐标(x, y), 和矩形尺寸(width, height) 构造一个矩形对象
QRect::QRect(int x, int y, int width, int height);
// 设置矩形的尺寸信息, 左上角坐标不变
void QRect::setSize(const QSize &size);
// 设置矩形左上角坐标为(x,y), 大小为(width, height)
void QRect::setRect(int x, int y, int width, int height);
// 设置矩形宽度
void QRect::setWidth(int width);
// 设置矩形高度
void QRect::setHeight(int height);
// 返回值矩形左上角坐标
QPoint QRect::topLeft() const;
// 返回矩形右上角坐标
// 该坐标点值为: QPoint(left() + width() -1, top())
QPoint QRect::topRight() const;
// 返回矩形左下角坐标
// 该坐标点值为: QPoint(left(), top() + height() - 1)
QPoint QRect::bottomLeft() const;
// 返回矩形右下角坐标
// 该坐标点值为: QPoint(left() + width() -1, top() + height() - 1)
QPoint QRect::bottomRight() const;
// 返回矩形中心点坐标
QPoint QRect::center() const;
// 返回矩形上边缘y轴坐标
int QRect::top() const;
int QRect::y() const;
// 返回值矩形下边缘y轴坐标
int QRect::bottom() const;
// 返回矩形左边缘 x轴坐标
int QRect::x() const;
int QRect::left() const;
// 返回矩形右边缘x轴坐标
int QRect::right() const;
// 返回矩形的高度
int QRect::width() const;
// 返回矩形的宽度
int QRect::height() const;
// 返回矩形的尺寸信息
QSize QRect::size() const;
//调整矩形的尺寸 (左上角和右下角坐标偏移量)
void QRect::adjust(int dx1, int dy1, int dx2, int dy2)
QRect QRect::adjusted(int dx1, int dy1, int dx2, int dy2) const
基本属性的获取
QRect rect(0, 0, 5, 6); // 左上角点坐标 宽高
qInfo() << rect; // QRect(0,0 5x6)
//获取属性
qInfo() << rect.x() << rect.y() << rect.width() << rect.height(); // 0 0 5 6
基本属性的设置
QRect rect(0, 0, 5, 6); // 左上角点坐标 宽高
//设置属性
rect.setRect(5, 5, 5, 5);
rect.setX(0);
rect.setY(0);
qInfo() << rect; // QRect(0,0 10x10)
qInfo() << rect.topLeft() // QPoint(0,0)
<< rect.topRight() // QPoint(9,0)
<< rect.bottomLeft() // QPoint(0,9)
<< rect.bottomRight(); // QPoint(9,9)
矩形的移动
//矩形的移动
QRect r(0, 0, 8, 8);
r.moveTo(1, 1);
qInfo() << r; // QRect(1,1 8x8)
//移动中心点
r.moveTo(0, 0); // 移动回原来的位置
r.moveCenter(QPoint(0, 0)); // 将中心点移动到(0,0)的位置
qInfo() << r; // QRect(-3,-3 8x8)
矩形尺寸的调整
//调整矩形尺寸
qInfo() << QRect(0, 0, 640, 480).adjusted(5, 5, -5, -5); // QRect(5,5 630x470)
浮点型版本的矩阵
//浮点型版本
qInfo() << QRectF(1.1, 1.1, 5.1, 5.1); // QRectF(1.1,1.1 5.1x5.1)