Qt坐标系统

GUI开发工作怎么都少不了对坐标系统的认识和了解,t中每一个窗口都有一个坐标系,默认窗口左上角为坐标原点,然后水平向右依次增大,水平向左依次减小,垂直向下依次增大,垂直向上依次减小。原点即为(0,0)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

  GUI开发工作怎么都少不了对坐标系统的认识和了解,t中每一个窗口都有一个坐标系,默认窗口左上角为坐标原点,然后水平向右依次增大,水平向左依次减小,垂直向下依次增大,垂直向上依次减小。原点即为(0,0)点,以像素为单位增减。

一、窗口部件的定位

  GUI程序在坐标系统中进行窗口和部件的定位

     定位类型分为:

     A、顶级窗口部件的定位

     B、窗口内部件的定位

     C、窗口部件的大小设置

     QT使用统一的坐标系统定位窗口部件的位置和大小

     QT部件类提供成员函数在坐标系统中进行定位

  QWidget类提供了窗口部件所需的坐标系统成员函数

  Qt坐标系统

  intx() const;

     inty() const;

     int width() const;

     int height() const;

     以窗口左上角为坐标系原点,但width()和height()分别为客户区的宽和高

       const QRect &geometry() const;

  intx() const;

  inty() const;

  int width() const;

  int height() const;

     以客户区左上角为坐标系原点,width()和height()分别为客户区的宽和高

  QRectframeGeometry() const;

  intx() const;

  inty() const;

  int width() const;

  int height() const;

       以窗口左上角为坐标系原点,width()和height()分别为窗口的宽和高

二、坐标系变换

  坐标系变换是利用变换矩阵来进行的, 通常利用QTransform类来设置变换矩阵。QPainter类提供了对坐标系的平移,缩放,旋转,扭曲等变换数。    

  void translate(const QPointF & offset)

     void translate(const QPoint & offset)

     void translate(qreal dx, qreal dy)

     void scale(qreal sx, qreal sy)

     void shear(qreal sh, qreal sv)

     void rotate(qreal angle)

     void save()

     void restore()

(1)平移变换

    QT利用translate()函数进行平移变换。

    平移变换代码:

    QPainter painter(this);

    painter.setBrush(Qt::yellow);

    painter.drawRect(0,0,50,50);

    //将当前坐标系下的点(100,100)设为原点

    painter.translate(100,100);

    painter.setBrush(Qt::red);

    painter.drawRect(0,0,50,50);

    //将当前坐标系下的点(-100,-100)设为原点

    painter.translate(-100,-100);

    painter.drawLine(0,0,20,20);

(2)比例变换

    利用scale()函数进行比例变换,实现缩放效果。

    比例变换代码:

    QPainter painter(this);

    painter.setBrush(Qt::yellow);

    painter.drawRect(0,0,100,100);

    //将坐标系在x,y方向放大2倍

    painter.scale(2,2);

    painter.setBrush(Qt::red);

    painter.drawRect(50,50,50,50);

(3)扭曲变换

    利用shear()函数就行扭曲变换。

    扭曲变换代码:

    QPainter painter(this);

    painter.setBrush(Qt::yellow);

    painter.drawRect(0,0,50,50);

    //对当前坐标系的y轴进行扭曲

    painter.shear(0,1);

    painter.setBrush(Qt::red);

    painter.drawRect(50,0,50,50);

(4)翻转变换

    利用rotate()函数进行翻转变换。

    翻转变换代码:

    QPainter painter(this);

    //以原点为中心,顺时针旋转30度

    painter.rotate(30);

    painter.drawLine(0,0,100,0) ;

    //以原点为中心,顺时针再旋转30度

    painter.rotate(30);

    painter.drawLine(0,0,100,0);

(5)坐标系状态的保护

   绘图过程中需要快速的进行坐标系切换,绘制出不同的图形,因此需要对坐标系状态进行保护,
  可以先利用save()函数来保存坐标系现在的状态,然后进行变换操作,操作完之后,再用restore()
  函数将以前的坐标系状态恢复,本质是对坐标系进行入栈和出栈的操作。 坐标系状态保护代码: QPainter painter(
this); //保存当前坐标系状态 painter.save(); //平移坐标系原点到(100, 100) painter.translate(100,100); painter.drawLine(0,0,50,50); //将当前原点位于点(100, 100)的坐标系恢复到保存的坐标系状态 painter.restore(); painter.drawLine(0,0,50,50);

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120084.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 苹果手机数据转移到新手机_不同品牌手机一键换机:换新手机怎么转移数据?…

    苹果手机数据转移到新手机_不同品牌手机一键换机:换新手机怎么转移数据?…我们正处于一个数码产品更新换代非常快速的时代,很多消费者会紧跟时代潮流,经常更换新手机,但是更换手机之后我们通常需要将旧手机里的数据进行转移,不同品牌之间的手机怎么进行一键换机呢?以安卓手机更换苹果手机转移数据为例:1、首先我们需要在安卓手机上安装“转移到iOS”APP,通过该应用我们可以将安卓手机的数据转移到新的苹果手机上2、确保安卓设备处于WiFi状态3、将安卓设备以及苹果设备连接电源4、设置…

    2022年5月25日
    39
  • vector释放内存之swap方法

    相信大家看到swap这个词都一定不会感到陌生,就是简单的元素交换。但swap在C++STL中散发着无穷的魅力。下面将详细的说明泛型算法swap和容器中的swap成员函数的使用!1.泛型算法swa

    2021年12月28日
    42
  • Pytest(1)安装与入门[通俗易懂]

    Pytest(1)安装与入门[通俗易懂]pytest介绍pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它

    2022年7月28日
    1
  • 负电压转换芯片_芯片电路原理

    负电压转换芯片_芯片电路原理1.工作原理首先,我们了简单的分析一下电路的工作原理。4个MOS管,Q1,Q2一组,Q3,Q4一组。U1是15系列单片机,U2是一个反相器。前面的电容C1负责从电源搬运电荷,后面的电容C2负责存储电荷,并且对负载进行供电。当U1的P1.4口输出高电平时,Q1,Q2一组导通,Q3,Q4一组截止。+5V电源通过Q1,Q2为电容C1进行充电。当U1的P1.4口输出低电平时,Q3,Q4一组导通,Q1,Q2一组截止。+5V电源没有电流回路。C1充当电源进行放电,通过Q3,GND,C2,Q4对C2进..

    2022年8月10日
    4
  • Go适合做什么?为何这么多人偏爱Go语言?

    Go作为Google2009年推出的语言,其被设计成一门应用于搭载Web服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。到现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。哪些大公司在使用Go语言:1、Goog…

    2022年4月6日
    73
  • ASP也做工作流

    ASP也做工作流

    2021年8月7日
    61

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号