赞
踩
绘图设备的物理坐标是基本的坐标系
,通过QPainter的平移、旋转等变换可以得到更容易操作的逻辑坐标
为了实现更方便的坐标,QPainter还提供了视口(Viewport)
和窗口(Window)
坐标系,通过QPainter内部的坐标变换矩阵自动转换为绘图设备的物理坐标
视口表示绘图设备的任意一个矩形区域的物理坐标,可以只选取物理坐标的一个矩形区域用于绘图。默认情况下,视口等于绘图设备的整个矩形区
窗口与视口是同一个矩形,只不过是用逻辑坐标定义的坐标系。窗口可以直接定义矩形区的逻辑坐标范围
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); } Widget::~Widget() { delete ui; } void Widget::paintEvent(QPaintEvent* event){ QPainter painter(this); int width = this->width(); int height = this->height(); QRect rect(width/4,height/4,width/2,height/2); // painter.setViewport(width/2,height/2,width/2,height/2); // painter.setWindow(width/2,height/2,width,height); QPen pen; pen.setWidth(3); pen.setColor(Qt::blue); pen.setStyle(Qt::SolidLine); pen.setCapStyle(Qt::FlatCap); pen.setJoinStyle(Qt::BevelJoin); painter.setPen(pen); QBrush brush; brush.setColor(Qt::green); brush.setStyle(Qt::SolidPattern); painter.setBrush(brush); painter.drawRect(rect); }
选择右下角四分之一区域作为视口
painter.setViewport(width/2,height/2,width/2,height/2);
painter.setWindow(-width/2,-height/2,width,height);
更改窗口大小
painter.setWindow(-width/2,-height/2,width/2,height/2);
这里思考一下窗口的起点坐标和窗口的大小,自然明白此处为什么不显示矩形
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。