Qt中的viewport与window

前提:讲述QPainter绘制、无其他变换。

viewport默认是整个paint device窗口,对QWidget来说就是整个QWidget窗口。

window永远是与viewport全等的矩形。

setViewport的作用是在paint device上圈定一个矩形(以device坐标),用来作为window的参照。除了作为window的参照,viewport这个概念基本上没什么作 用。那viewport作为window的参照是什么意思呢?刚才说了,window永远与viewport全等,当圈定viewport 时,window实际上物理尺寸和位置就固定了。那window()函数返回的QRect表示什么意思呢?实际上window是个逻辑概念,可以想象为 paint device表面有一张透明的平面,在这个透明平面上要建立一个二维直角坐标系,那原点如何取,单位刻度如何取?答案是setWindow(rc)。原理是:圈定的viewport与透明平面上有一个矩形重合,这个在透明平面上的矩形在透明平面上的坐标就是rc给出的,这时候,就相当于我们在透明平面上确确实实也圈定了一个矩形,四个点坐标都有了(rc给出的),这样就能推导出这个透明平面上的坐标系的原点和单位刻度。后续的QPainter.drawXXX系列函数给出的坐标,都是指这个透明平面上的坐标系中的坐标,即window坐标系里的坐标。

理解了这一点。灵活setViewport和setWindow就能实现缩放,平移翻转啥的效果。

//////////////

Qt的Graphics View框架中,场景坐标对应QPainter的逻辑坐标,也就是场景就是window的概念,视图坐标和设备坐标相同。因此,setWindow在这里就对应setSceneRect

时间: 2024-10-01 20:25:23

Qt中的viewport与window的相关文章

Qt中绘图坐标QPainter,Viewport与Window的关系

在Qt中常常要自己重载一些paintEvent函数,这个时候往往忽略了两个很关键的API,那就是setViewport和setWindow. Viewport,顾名思义,反应的是物理坐标,就是你实际想在当前坐标系下哪块区域画图,比如(50,50,100,100)的一个rect. Window而是逻辑坐标,你可以设置它从(0,0)开始,这样你可以setViewport(m_rect)之后,setWindow(0, 0, m_rect.width(), m_rect.height())来重新把物理坐

第47课 Qt中的调色板

1. QPalette类 (1)QPalette类提供了绘制QWidget组件的不同状态所使用的颜色. (2)QPalette对象包含了3个状态的颜色描述 ①激活颜色组(Active):组件获得焦点使用的颜色搭配方案 ②非激活颜色组(Inactive):组件失去焦点使用的颜色方案 ③失效颜色组(Disabled):组件处于不可用状态使用的颜色方案 2.QPalette类中颜色组用途 (1)QPalette类中的颜色组定义了组细节的颜色值 (2)QPalette::ColorRole中的常量值用于

Qt中截图功能的实现

提要 需求:加载一张图片并显示,可以放大缩小,可以截取图片的某个矩形并保存. 原以为蛮简单的一个功能,其实还是有点小复杂. 最简单Qt图片浏览器可以参考Qt自带的Demo:Image Viewer Example 看一下最终的实现效果: 图片的加载显示 这里需要实现一个QImageViewer的类,继承自QWidget. 图片用QPixmap来加载和显示,还有三个成员分别是图片的缩放因子,图片是否已经加载,viewer是否已经初始化,是否处于裁剪状态. private: QPixmap m_pi

Qt中实现启动画面

纵所周之,当一个程序的启动比较耗时的时候,为了不让用户枯燥的等待或者是误以为程序运行异常了,所以我们都会在启动比较耗时的程序中加上启动界面 ,例如office软件等等. 在Qt中实现启动界面,主要就是使用QSplashScreen类.该类比较简单,这里就不对类本身做过多说明了,主要是以一个例子来说明他的使用方法. 1.首先,我们的实现如下: [cpp] view plaincopy #include <QApplication> #include <QSplashScreen> #

Qt 中一些常用类中文说明

Qt 中一些常用类中文说明是本文讲述的内容,这篇文章主要是介绍Qt 当中经常使用的类,采取的是使用字母索引的方式,下面的类是被经常使用的. QDataStream 为QIODevice提供了一串的二进制的数据 QDataWidgetMapper 提供了从数据模型到部件的映射 QData 日期的功能 QDateEdit 提供了日期的部件用来编辑日期,是基于QDateTimeEdit 部件 QDateTime 提供日期与时间的功能 QDateTimeEdit 提供了编辑日期与实践的部件 QDBusA

Qt中,当QDockWidget的父窗口是一个不可以拖动的QTabWidget的时候实现拖动的方法

之前在做有关QDockWidget的内容时候遇到了瓶颈,那就是窗口弹出来之后拖动不了,也不可以放大和缩小,若是弹出来之后设置成了window的flags,也不可以拖动,而且也不是需要的效果. 1.弹出来之后的dockwidget的titlebar右边需要有3个按钮分别来控制放大与恢复.弹出来与收进去和关闭按钮.考虑到Qt自带的dockwidget弹出来后实现不了这个,所以参考了网上的方法,需要自己从QWidget中派生一个类来实现自己的titlebar 2.因为dockwidget是嵌套在QTa

QT中关于窗口全屏显示与退出全屏的实现

近期在学习QT时遇到了很多问题这也是其中一个,个人通过在各种书籍和网络上的查阅找到了一些关于这方面的答案,希望能给大家一些帮助. 首先,在QT中对于窗口显示常用的有这么几个方法可以调用: Qt全屏显示函数            showFullScreen() Qt最大化显示函数         showMaximized()Qt最小化显示函数         showMinimized()Qt固定尺寸显示函数      resize(x,y)Qt设置最大尺寸函数      setMaximum

Qt中的属性设置(搜集整理)

一.Qt中的属性 属性是指窗口或控件的属性,比如opacity属性表示"透明度",geometry指的是"位置和大小",pos属性代表"位置".qt中的控件有自带的属性,我们也可以自己定义属性. QObject这个类有一个函数setProperty,我们可以通过这个函数定义自己的属性,使用方法很简单,setProperty(const char * name, const QVariant & value),第一个参数是属性的名称,第二个

Qt 中如何捕获窗口停用和激活的消息

最近一直在用Qt做一个简单的俄罗斯方块的游戏,由于要实现一个暂停游戏的功能,就是当鼠标移出正在运行的游戏,点击电脑桌面上的其他位置时,这个时候游戏暂停.在这里把实现过程简单的记录一下,作为一个学习笔记,如果有什么错误之处,还希望大家指出,共同提高,谢谢!刚开始的时候,我很自然的想到要实现这个功能,只要重载一下下面的这个函数: [cpp] view plaincopy void QWidget::focusOutEvent ( QFocusEvent * event )   [virtual pr