Qt 坐标系统

一.坐标系统

以屏幕的左上角为原点即(0, 0)点,从左向右为x轴正向,从上向下为y轴正向,这整个屏幕的坐标系统就用来定位顶层窗口

此外,窗口内部也有自己的坐标系统,它依然以左上角作为原点,从左向右为x轴正向,从上向下为y轴正向,原点、x轴、y轴围成的区域叫做Client Area(客户区),在客户区的周围则是标题栏(Windows Title)和边框(Frame)。

二.坐标分析 

创建了一个最顶层Widget。 

#include "widget.h"
#include <QApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    qDebug()<<"=============窗口属性=============";
    qDebug()<<"w.x() = "<<w.x();
    qDebug()<<"w.y() = "<<w.y();
    qDebug()<<"w.width() = "<<w.width();
    qDebug()<<"w.height() = "<<w.height();
    qDebug()<<"==========Geometry属性============";
    qDebug()<<"w.geometry().x() = "<<w.geometry().x();
    qDebug()<<"w.geometry().y() = "<<w.geometry().y();
    qDebug()<<"w.geometry().width() = "<<w.geometry().width();
    qDebug()<<"w.geometry().height() = "<<w.geometry().height();
    qDebug()<<"==========frameGeometry属性============";
    qDebug()<<"w.frameGeometry().x() = "<<w.frameGeometry().x();
    qDebug()<<"w.frameGeometry().y() = "<<w.frameGeometry().y();
    qDebug()<<"w.frameGeometry().width() = "<<w.frameGeometry().width();
    qDebug()<<"w.frameGeometry().height() = "<<w.frameGeometry().height();

    return a.exec();
}

输出结果:

结论:

1.QWidget提供的x,y表示的坐标与frameGeometry().x(),frameGeometry().y()的相同。

2.geomerty()函数,表示客户区的函数,其长和宽 和 widget的长和宽相同,但是其x、y坐标比widget的x、y坐标大,这就证实上图中的坐标系统。

3.frameGeometry().width(),frameGeometry().height(),比widget的长和宽要大一些。

分析2:

调用move(0,0)方法。使其移动到屏蔽的左上角。以下是我调用move(0,0)方法后,可以明显看见窗口左上角未与屏幕左上角重合,可以自己去试试。

结论:

以下是Qt的注释:

move函数移动的位置其实是它的外框移动的位置。

调用w.setGeometry(0,0,400,300)方法,可以使客户区x、y坐标与屏幕左上角重合,需要隐藏窗口标题栏。调用以下方法设置窗口隐藏。

w.setWindowFlags(Qt::FramelessWindowHint)

三.坐标转换

 在窗口上放了一个pushButton,如图

如果想要知道pushButton的左上角坐标相对于整个屏幕的坐标,则调用

QPoint pos = ui->pushButton->pos(); 

QPoint posLeftUp = w.mapToGlobal(pos);

如果想要知道pushButton的右下角坐标相对于整个屏幕的坐标,则调用

QPoint pos = ui->pushButton->pos();

QPoint pos2;

pos2.setX(pos.x()+ui->pushButton->width());

pos2.setY(pos.y()+ui->pushButton->height());

QPoint posRightDown= w.mapToGlobal(pos2);

四.坐标变换

坐标变换、包括平移、旋转、缩放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

灬Sunnnnn

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

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

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

打赏作者

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

抵扣说明:

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

余额充值