Qt绘图和绘图设备

1.QPainter绘图系统

1.1 QPainter与QPainterDevice

    Qt绘图系统允许使用相同的API在屏幕和其他打印设备上进行绘制,整个绘图系统基于QPainter,QPainterDevice,QPaintEngine三个类。

    QPainter用来执行绘制的操作

    QPainterDevice是一个二维空间的抽象,这个二维空间允许QPainter在上面进行绘制,即QPainter工作的空间

    QPaintEngine提供了画笔(QPainter)在不同的设备上进行绘制的统一的接口

    QPaintEngine类应用于QPainter和QPainterDevice之间,通常对于开发人员是透明的,除非你需要自定义一个设备,否则你是不需要关心QPaintEngine这个类的。

    我们可以把QPainter理解成画笔;把QPainterDevice理解为使用画笔的地方《画布》,为了统一使用同一种画笔,就设计了QPaintEngine类,这个类让不同的画布、屏幕能使用同一种画笔

   上图表示,Qt的绘图系统实际上是使用QPainter在QPainterDevice上进行绘制,他们之间使用QPaintEngine进行通讯(也就是翻译QPainter的指令)

    一般绘图设备包括QWidget、QPixmap、QImage等,这些绘图设备为QPainter提供一个“画布”

1.2 paintEvent事件

   QWidget类及其子类是最常用的绘图设备,从QWidget类继承的类都有paintEvent()事件,要在设备上绘图,只需要重定义此事件并编写响应代码即可。

   在响应代码中创建一个QPainter对象获取绘制设备的接口,然后就可以在绘图设备的“画布”上绘图了

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this); // 创建与绘图设备关联的QPainter对象
    
    ...  add your code  ...
    // painter在设备的窗口上画图

}

1.3 QPainter绘制基本图形元件

函数名功能
drawArc

画弧线

drawChorddrawChord 画一段弦
drawConvexPolygon根据给定的点画凸多边形
drawEllipse画椭圆
drawImage在指定的矩形区域内绘制图片
drawLine画直线
drawLines画一批直线
drawPath绘制由QPainterPath对象定义的路线
drawPie绘制扇形
drawPixmap绘制Pixmap图片
drawPoint画一个点
drawPoints画一批点
drawPolygon画多边形,最后一个点会和第一个点闭合
drawPolyline画多点连接的线,最后一个点不会和第一个点连接
drawRect画矩形
drawRoundedRect画圆角矩形
drawText绘制文本,只能绘制单行文字,字体大小等属性由QPainter::font()决定
eraseRect擦除某个矩形区域,等效于用背景色填充该区域
fillPath填充某个QPainterPath定义的绘图路径,但轮廓线不显示
fillRect填充一个矩形,无边框线

 

实例:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.drawRoundedRect(50,50,200,300,20,20);
}

 

1.4 QPainter绘图的主要属性

<1>pen属性  [画笔QPen]

<2>brush属性 [画刷QBrush]

<3>font属性 [字体QFont]

实例:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);

    QPen pen(Qt::PenStyle::DotLine);
    painter.setPen(pen); // 设置画笔
    QBrush brush(QColor(255,255,0), Qt::BrushStyle::CrossPattern);
    painter.setBrush(brush); // 设置画刷

    // 封闭图形自动填充画刷
    painter.drawRoundedRect(50,50,200,300,20,20);
}

结果:

 

2.绘图设备

2.1 QPixmap

       创建对象 QPixmap pix(w,h)

       填充颜色 fill

       保存 save

2.2 QBitMap(黑白色)

2.3 QImage 

        设置色位等,可以设置里面的任意像素

2.4 QPicture 

        保存绘图指令,也可以重现指令

2.5 QWidget

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值