当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

<b>Qt学习之路(28):坐标变更</b>[VC/C++编程]

赞助商链接



  本文“<b>Qt学习之路(28):坐标变更</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

经过前面的章节,我们已经可以画出一些东西来,主要就是利用QPainter的相关函数.本日,我们要看的是QPainter的坐标系统.

同很多坐标系统一样,QPainter的默许坐标的原点(0, 0)位于屏幕的左上角,X轴正方向是水平向右,Y轴正方向是竖直向下.在这个坐标系统中,每个像素占据1 x 1的空间.你可以把它想象成是一张坐标值,此中的每个小格都是1个像素.这么说来,一个像素的中央实际上是一个“半像素坐标系”,也就是说,像素(x, y)的中央位置其实是在(x + 0.5, y + 0.5)的位置上.因此,假如我们利用QPainter在(100, 100)处绘制一个像素,那么,这个像素的中央坐标是(100.5, 100.5).

这种渺小的差别在实际利用中,分外是对坐标要求切确的系统中是很重要的.首先,只有在禁止反走样,也就是默许状况下,才会有这0.5像素的偏移;假如利用了反走样,那么,我们画(100, 100)位置的像素时,QPainter会在(99.5, 99.5),(99.5, 100.5),(100.5, 99.5)和(100.5, 100.5)四个位置绘制一个亮色的像素,这么产生的效果就是在这四个像素的核心处(100, 100)产生了一个像素.假如不需求这个特点,就需求将QPainter的坐标系平移(0.5, 0.5).

这一特点在绘制直线、矩形等图形的时刻城市用到.下图给出了在没有反走样技术时,利用drawRect(2, 2, 6, 5)绘制一个矩形的示例.在No Pen的情形下,请注意矩形左上角的像素是在(2, 2),此中央位置是在(2.5, 2.5)的位置.然后注意下有差别的Pen的值的绘制款式,在Pen宽为1时,实际画出的矩形的面积是7 x 6的(图出自C++ GUI Programming with Qt4, 2nd Edition):

在具有反走样时,利用drawRect(2, 2, 6, 5)的效果以下(图出自C++ GUI Programming with Qt4, 2nd Edition):

注意我们前面说过,通过平移QPainter的坐标系来消除着0.5像素的差别.下面给出了利用drawRect(2.5, 2.5, 6, 5)在反走样情形下绘制的矩形(图出自C++ GUI Programming with Qt4, 2nd Edition):

请比较与上图的辨别.

在上述的QPainter的默许坐标系下,QPainter供应了视口(viewport)窗口(window)机制,用于绘制与绘制设备的大小和辨别率无关的图形.视口和窗口是精密的接洽在一同的,它们普通都是矩形.视口是由物理坐标肯定其大小,而窗口则是由逻辑坐标决意.我们在利用 QPainter举行绘制时,传给QPainter的是逻辑坐标,然后,Qt的画图机制会利用坐标变更将逻辑坐标转换成物理坐标后举行绘制.

普通,视口和窗口的坐标是一致的.比方一个600 x 800的widget(这是一个widget,大概是一个对话框,大概是一个面板等等),默许情形下,视口和窗口都是一个320 x 200的矩形,原点都在(0, 0),此时,视口和窗口的坐标是相同的.

注意到QPainter供应了setWindow()和setViewport()函数,用来设置视口和窗口的矩形大小.比方,在上面所述的 320 x 200的widget中,我们要设置一个从(-50, -50)到(+50, +50),原点在中央的矩形窗口,便可以利用

painter.setWindow(-50, -50, 100, 100);

此中,(-50, -50)指明了原点,100, 100指明了窗口的长和宽.这里的“指明原点”意思是,逻辑坐标的(-50, -50)对应着物理坐标的(0, 0);“长和宽”阐明,逻辑坐标系下的长100,宽100实际上对应物理坐标系的长320,宽200.

大概你已经发现这么一个好处,我们可以随时改变window的范围,而不改变底层物理坐标系.这就是前面所说的,视口与窗口的作用:“绘制与绘制设备的大小和辨别率无关的图形”,以下图所示(图出自C++ GUI Programming with Qt4, 2nd Edition):


  以上是“<b>Qt学习之路(28):坐标变更</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .