我知道painter.setWindow
是如何运作的。例如,如果我将窗口小部件放大,那么我在该窗口小部件中绘制的内容也会以相同的比例变大。
但我无法理解painter.setViewport
到底做了什么。任何人都可以向我解释它是如何工作的并给我一个例子吗?
答案 0 :(得分:1)
正如文档所写,它是设备坐标系,而不是逻辑。即使默认值相同,它们也不一定相等。
由于API兼容性,此功能主要出现。在真正的转换功能支持之前的3天,这是必要的。
您可以通过翻译和扩展您可以对视口执行的操作来完成所有操作。这只是个人偏好,虽然前者更符合Qt中的Vector API。
答案 1 :(得分:1)
我想出来了,这就是答案,如果有人用Google搜索它:
我创建此代码以查看差异以及两者是如何工作的,我在调整窗口大小时输出window
和viewport
坐标。
(只使用任意数字)
QPen pen(Qt::blue,3,Qt::SolidLine);
painter.setPen(pen);
painter.setViewport(50,50,100,100);
painter.setWindow(-100,-150,200,200);
QRect rect= painter.viewport();
QRect wind= painter.window();
cout<< rect.x() << " "<< rect.y() << " "<< rect.height() << " "<< rect.width() <<endl;
cout<< wind.x() << " "<< wind.y() << " "<< wind.height() << " "<< wind.width() <<endl;
painter.drawRect(0,0,200,202);
并使用这两个评论中的任意一行运行该程序
painter.setViewport(50,50,100,100);
painter.setWindow(-100,-150,200,200);
评论setwindow
并设置setviewport
时,矩形会变小,为什么?
在调整窗口大小时,逻辑(窗口)和物理(视口)坐标都应该改变相同。但是这里我set
Viewport
常量,所以逻辑坐标(绘图一个)只是一个变化。因此,当窗口调整大小时,逻辑坐标必须适合小常量viewport
,因此矩形变小