目录
setWindow
????????在Qt中,QPainter
的setViewport()
方法用于定义绘图区域在窗口坐标系中的可视部分。
QPainter::setWindow()
?是 Qt 库中?QPainter
?类的一个方法,用于定义绘图区域的大小和位置。
setViewport()
与setWindow()
方法一起使用,以控制绘图的缩放和裁剪。
????????可以通过先设置视口,再设置对应的窗口的方法,来确保我们的代码在标准的想象中的坐标
系中绘制的图形,可以准确地显示在不同的绘图设备界面上。
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)也是一样的效果)
绘制如下
比如代码如下
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);
}
?
我绘制了1/4大小的红色矩形,无论窗口怎样变化,红色矩形始终占了窗口的?1/4,这里的窗口可以
模拟为设备,即在不同屏幕大小的设备上所占的比例不变。
(1)视口定义显示区域,和setWindow窗口有一定的映射关系,设置好窗口的坐标系后,后续绘
制就按照窗口坐标系绘制即可
(2)可以通过先设置视口,再设置对应的窗口的方法,可以准确地显示在不同的绘图设备界面上。