绘图系统
QPainter 绘图操作的类,绘图设备一般包括Qwidget、Qpixmap、QImage.他们提供给QPainter画布。
从QWidget类继承的类都有paintEvent()事件,该函数是虚函数,重写该函数。
QPainter 重要的属性
1.pen属性:Qpen对象,控制线条的颜色、宽度、线性。
void setPen(const QPen &pen);
const QPen &pen() const;
2.brush属性:QBrush,区域填充特性,填充的颜色、方式、渐变。
void setBrush(const QBrush &brush);
const QBrush &brush() const;
3.font属性:QFont对象,文字的字体样式、大小等。
void setFont(const QFont &f);
const QFont &font() const;
画图
绘图坐标系统的单位是像素。左上角的坐标是(0,0)。
物理坐标,即是视口坐标(viewport)
逻辑坐标,即是窗口坐标(window)
获取绘图区的区域
宽度:inline int width() const;
高度:inline int height() const;
1.画点
inline void drawPoint(int x, int y);
2.画线
inline void drawLine(const QPoint &p1, const QPoint &p2);
在画直线的还可以使用QPainterPath。
QPainterPath 类(绘图路径)提供了一个容器,用于绘图操作,可以创建和重用图形形状。
绘图路径是由许多图形化的构建块组成的对象,例如:矩形、椭圆、直线和曲线
3.画由QPainterPath定义的路线
void drawPath(const QPainterPath &path);
4.画pixmap图片
inline void drawPixmap(const QRect &r, const QPixmap &pm);
5.画矩形
inline void drawRect(const QRect &rect);
6.画文本
void drawText(const QRectF &r, const QString &text, const QTextOption &o = QTextOption());
7.填充
void fillRect(const QRect &, const QColor &color);
坐标变换函数
1.平移 inline void translate(qreal dx, qreal dy); //单位是像素
2.旋转 void rotate(qreal a); //单位是度,正数为 顺时针,负数为逆时针
3.缩放 void scale(qreal sx, qreal sy); 大于1放大,小于1缩放
4.保存当前状态:void save();
5.恢复上一次的状态:void restore();
6.复位:void resetTransform();
7.设置视口坐标 (物理坐标) //基于物理坐标,默认一般以左上角为原点(0,0)
void setViewport(const QRect &viewport);
或inline void setViewport(int x, int y, int w, int h);
(x,y)为视口的起点,其起点值还是根据widget的左上角的坐标作为原点(0,0)算起。
8.窗口坐标(逻辑坐标) //具有逻辑坐标,而不能再看物理的坐标,其起点不再是以坐上角(0,0)为原点
void setWindow(const QRect &window);
或inline void setWindow(int x, int y, int w, int h);
(x,y)为窗口坐标的左上角的坐标, 不再是以widget的左上角的坐标作为(0,0)算起。
(0,0)可以是根据自己实际情况设定的某一位置。是在视口坐标的基础上,根据自己的要求,划分设定视口坐标。
窗口坐标的优点:只需按照窗口坐标定义来画图,而不用管实际的物理坐标范围的大小。
这样当实际设备大小变化时,绘制图形自动变化大小。这样,是绘图与设备隔离开来。适用不同的设备,大小。