2D绘图--视口窗口setViewport setWindow

目录

1 setViewport setWindow

2 示例

3 实际应用(个人理解)

4 总结


1 setViewport setWindow

        在Qt中,QPaintersetViewport()方法用于定义绘图区域在窗口坐标系中的可视部分。

QPainter::setWindow() 是 Qt 库中 QPainter 类的一个方法,用于定义绘图区域的大小和位置。

setViewport()setWindow()方法一起使用,以控制绘图的缩放和裁剪。

        可以通过先设置视口,再设置对应的窗口的方法,来确保我们的代码在标准的想象中的坐标

系中绘制的图形,可以准确地显示在不同的绘图设备界面上。

2 示例
void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    int width = this->width();
    int hight = this->height();
    int view_x = width / 4;
    int view_y = hight / 4;
    int side = hight / 2;
    qDebug()<<"width:"<

执行结果:

2D绘图--视口窗口setViewport setWindow_第1张图片

 代码说明:

        打印输出

width: 400 hight: 300
view_x: 100 view_y: 75 side: 150

(1)painter.setViewport(view_x,view_y,side,side);

用于定义绘图区域的大小和位置 实际值为painter.setViewport(100,75,150,150);

        即起点(100,75)长宽150的绘图区域 

为方便观察 painter.drawRect(view_x,view_y,side,side);绘制出了这一区域 即黑色方框

(2)painter.setWindow(-100,-100,200,200);定义你想要绘制的大小。

        具体来说 是有一个映射关系 即点(-100,-100)与视口的(0,0)点对应就是黑色方框的左

上角,宽和长也和视口一一映射对应,有一定的比例关系

        所以绘图时计算设置的setWindow窗口坐标就行 窗口黑色方框左上角(-100,-100),右下角(100,100)

        此时painter.drawRect(0,0,100,100);的起始点(0,0)就对应的是窗口的中心 绘制出来如上图所示

(3)如果想在方框的右上角开始画

painter.setWindow(-200,0,200,200);

        此时方框的右上角坐标就是(0,0)

(也可以保持painter.setWindow(-100,-100,200,200)不变,改变绘制坐标painter.drawRect(100,-100,100,100)也是一样的效果)

绘制如下

2D绘图--视口窗口setViewport setWindow_第2张图片

3 实际应用(个人理解)

比如代码如下

void MainWindow::paintEvent(QPaintEvent *)
{
    //我的初始窗口的大小width=400 hight=300
    QPainter painter(this);
    int width = this->width();
    int hight = this->height();

    painter.setPen(Qt::black);
    painter.drawRect(0,0,width,hight);
    painter.setViewport(0,0,width,hight);

    painter.setWindow(0,0,400,300);
    painter.setPen(Qt::red);
    QBrush brush(Qt::red);
    painter.setBrush(brush);
    painter.drawRect(0,0,200,150);

}

2D绘图--视口窗口setViewport setWindow_第3张图片

我绘制了1/4大小的红色矩形,无论窗口怎样变化,红色矩形始终占了窗口的 1/4,这里的窗口可以

模拟为设备,即在不同屏幕大小的设备上所占的比例不变。

4 总结

(1)视口定义显示区域,和setWindow窗口有一定的映射关系,设置好窗口的坐标系后,后续绘

制就按照窗口坐标系绘制即可

(2)可以通过先设置视口,再设置对应的窗口的方法,可以准确地显示在不同的绘图设备界面上。

你可能感兴趣的:(QT,2D,qt,2D绘图)