目录
1 setViewport setWindow
2 示例
3 实际应用(个人理解)
4 总结
1 setViewport setWindow
在Qt中,QPainter
的setViewport()
方法用于定义绘图区域在窗口坐标系中的可视部分。
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:"<<width<<"hight:"<<hight;qDebug()<<"view_x:"<<view_x<<"view_y:"<<view_y<<"side:"<<side;painter.setPen(Qt::black);painter.drawRect(view_x,view_y,side,side);painter.setViewport(view_x,view_y,side,side);painter.setWindow(-100,-100,200,200);painter.setPen(Qt::red);QBrush brush(Qt::red);painter.setBrush(brush);painter.drawRect(0,0,100,100);}
执行结果:
代码说明:
打印输出
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)也是一样的效果)
绘制如下
3 实际应用(个人理解)
比如代码如下
void MainWindow::paintEvent(QPaintEvent *)
{//我的初始窗口的大小width=400 hight=300QPainter 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);}
我绘制了1/4大小的红色矩形,无论窗口怎样变化,红色矩形始终占了窗口的 1/4,这里的窗口可以
模拟为设备,即在不同屏幕大小的设备上所占的比例不变。
4 总结
(1)视口定义显示区域,和setWindow窗口有一定的映射关系,设置好窗口的坐标系后,后续绘
制就按照窗口坐标系绘制即可
(2)可以通过先设置视口,再设置对应的窗口的方法,可以准确地显示在不同的绘图设备界面上。