【问题标题】:What's painter.setViewport exactly do?Painter.setViewport 到底是做什么的?
【发布时间】:2013-10-10 04:49:21
【问题描述】:

我知道painter.setWindow 的工作原理。例如,如果我将小部件最大化,那么我在该小部件中绘制的任何内容都会以相同的比例变大。

但我不明白 painter.setViewport 究竟做了什么。谁能给我解释一下它是如何工作的并给我一个例子?

【问题讨论】:

    标签: qt qpainter qtgui qtwidgets


    【解决方案1】:

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

    这个功能主要是因为 API 兼容性。在真正的转换功能支持前 3 天,这在 Qt 中是必要的。

    您可以使用平移和缩放来完成您也可以使用视口进行的所有操作。这只是个人喜好,尽管前者更符合 Qt 中的 Vector API。

    【讨论】:

      【解决方案2】:

      我想通了,这是答案,如果有人用谷歌搜索:

      我编写了这段代码来查看两者的区别以及两者的工作方式,我在调整窗口大小时输出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时,矩形应该变小了,为什么?

      在调整窗口大小时,逻辑(窗口)和物理(视口)坐标都应该改变相同。但这里我setViewport不变,所以逻辑坐标(绘图之一)只是一个变化.因此,当窗口调整得更大时,逻辑坐标必须适合小常数viewport,因此矩形会变小

      【讨论】:

        猜你喜欢
        • 2015-08-06
        • 2013-09-02
        • 2014-01-02
        • 2017-05-08
        • 2022-01-20
        • 2012-10-17
        • 2017-06-15
        • 2011-05-20
        • 2010-11-13
        相关资源
        最近更新 更多