(4)Qt中的位置和尺寸

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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

石小浪♪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值