【发布时间】:2013-10-10 04:49:21
【问题描述】:
我知道painter.setWindow 的工作原理。例如,如果我将小部件最大化,那么我在该小部件中绘制的任何内容都会以相同的比例变大。
但我不明白 painter.setViewport 究竟做了什么。谁能给我解释一下它是如何工作的并给我一个例子?
【问题讨论】:
标签: qt qpainter qtgui qtwidgets
我知道painter.setWindow 的工作原理。例如,如果我将小部件最大化,那么我在该小部件中绘制的任何内容都会以相同的比例变大。
但我不明白 painter.setViewport 究竟做了什么。谁能给我解释一下它是如何工作的并给我一个例子?
【问题讨论】:
标签: qt qpainter qtgui qtwidgets
正如文档所写,它是设备坐标系,而不是逻辑坐标系。即使默认值相同,它们也不一定彼此相等。
这个功能主要是因为 API 兼容性。在真正的转换功能支持前 3 天,这在 Qt 中是必要的。
您可以使用平移和缩放来完成您也可以使用视口进行的所有操作。这只是个人喜好,尽管前者更符合 Qt 中的 Vector API。
【讨论】:
我想通了,这是答案,如果有人用谷歌搜索:
我编写了这段代码来查看两者的区别以及两者的工作方式,我在调整窗口大小时输出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时,矩形应该变小了,为什么?
在调整窗口大小时,逻辑(窗口)和物理(视口)坐标都应该改变相同。但这里我setViewport不变,所以逻辑坐标(绘图之一)只是一个变化.因此,当窗口调整得更大时,逻辑坐标必须适合小常数viewport,因此矩形会变小
【讨论】: