什么painter.setViewport到底是做什么的?

时间:2013-10-03 13:07:16

标签: qt qpainter qtgui qtwidgets

我知道painter.setWindow是如何运作的。例如,如果我将窗口小部件放大,那么我在该窗口小部件中绘制的内容也会以相同的比例变大。

但我无法理解painter.setViewport到底做了什么。任何人都可以向我解释它是如何工作的并给我一个例子吗?

2 个答案:

答案 0 :(得分:1)

正如文档所写,它是设备坐标系,而不是逻辑。即使默认值相同,它们也不一定相等。

由于API兼容性,此功能主要出现。在真正的转换功能支持之前的3天,这是必要的。

您可以通过翻译和扩展您可以对视口执行的操作来完成所有操作。这只是个人偏好,虽然前者更符合Qt中的Vector API。

答案 1 :(得分:1)

我想出来了,这就是答案,如果有人用Google搜索它:

我创建此代码以查看差异以及两者是如何工作的,我在调整窗口大小时输出windowviewport坐标。  (只使用任意数字)

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,因此矩形变小