【Qt开发】QPainter/QPen/QBrush/QFont

QPainter绘图

QPainter是实现在各种绘图设备上绘制基本图形的类。QPainter能绘制点、直线、圆、矩形等各种基本图形,还可以绘制文字和位图,用这些基本图形可以组成任何想要的图形。

	QWidget的绘图事件和绘图区

QWidget类有一个事件处理函数paintEvent(),在组件界面需要重绘时,系统自动运行这个函数。需要在界面上绘图,我们需要在这此事件处理函数中创建一个QPainter对象来获取绘图设备的接口,然后用这个对象来进行绘图

	QPainter绘图的特性控制

用QPainter在绘图设备上绘图主要是指用QPainter的接口绘制基本图形,包括点、直线、圆、矩形、多边形、文字等。图形的特点,如线条特性、颜色特性、文字特性是由下面3个类决定。

  • QPen类:用于控制线条的宽度、颜色、线性。
  • QBrush类:用于设置一个区域的填充特性,包括颜色、填充样式、渐变特性等,还可以采用图片进行材质填充。
  • QFont类:设置文字的字体、样式、大小等属性。

QPainter有接口函数用于设置和返回当前使用的工具类对象,如下:

QPen &QPainter::pen()
QBrush  &QPainter::brush()
QFont  &QPainter::font()

void QPainter::setPen(const QPen &pen)//设置画笔
void QPainter::setBrush(const QBrush &brush)//设置画刷
void QPainter::setFont(const QFont &font)//设置文字

QPen类

QPen用于设置绘图时线条的特性,主要包括线宽、颜色、线性等

QPen类的主要函数如下:

void setColor(const QColor &color)//设置画笔的颜色、线条的颜色
void setWidth(int width)//设置线条的宽度,单位的像素
void setStyle(Qt::PenStyle style)//设置线条的样式
void setCapStyle(Qt::PenCapStyle style)//设置线条端点样式
void setJoinStyle(Qt::PenJoinStyle style)//设置线条连接样式
	线条样式
  • Qt::SolidLine:实线
  • Qt::DashLine:虚线
  • Qt::DotLine:点划线
  • Qt::NoPen:不绘制线条

除了这几种样式,用户还可以自定义线条样式,自定义线条样式时需要用到函数setDashOffset()setDashPattern()

	线条端点样式
  • Qt::FlatCap:方形的线条端,不覆盖线条端点
  • Qt::SquareCap:方形的线条端,覆盖线条端点并延申1/2线宽长度
  • Qt::RoundCap:圆角线条端

只有线条比较粗时,线条端点效果才会显现

	线条连接样式
  • Qt::BevelJoin:连接处是平的
  • Qt::RoundJoin:连接处是圆的
  • Qt::MiterJoin:连接处是尖的

QBrush类

QBrush是定义绘图时的填充特性,包括填充颜色、填充样式、材质填充时的材质图片等

QBrush类的主要函数如下:

//设置画刷颜色
void setColor(const QColor &color)
//设置画刷填充样式
void setStyle(Qt::BrushStyle style)
//设置一个QPixmap 类型的图片作为画刷的图片,画刷样式自动
//设置为Qt::TexturePattern
void setTexture(const QPixmap &pixmap)
//设置一个QImage 类型的图片作为画刷的图片,画刷样式自动
//设置为Qt::TexturePattern
void setTextureImage(const QImage &image)

枚举类型Qt::BrushStyle的参数如下:

枚举值描述
Qt::NoBrush不填充
Qt::SoildPattern单一颜色填充
Qt::HorPattern水平线填充
Qt::VerPattern垂直线填充
Qt::LinearGradientPattern线性渐变填充,需要使用QLinearGradient类对象作为画刷
Qt::RadialGradientPattern辐射渐变填充,需要使用QRadialGradient类对象作为画刷
Qt::ConicalGradientPattern圆锥性填充,需要使用QConicalGradient类对象作为画刷
Qt::TextruePattern材质填充
Qt::CrossPattern网格线填充
Qt::BDiagPattern斜线填充
Qt::Dense6Pattern密集点填充

QFont类

QFont类官方文档

案例-绘制电池

在这里插入图片描述

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    int w=this->width();
    int h=this->height();
    QRect rect(w/4,h/4,200,100);

    QPen pen;
    //画笔颜色黑,线条宽度3,实线
    pen.setColor(Qt::black);
    pen.setWidth(3);
    pen.setStyle(Qt::SolidLine);
    pen.setCapStyle(Qt::FlatCap);
    pen.setJoinStyle(Qt::BevelJoin);
    painter.setPen(pen);

    QBrush brush;
    //填充白色,单一颜色填充
    brush.setColor(Qt::white);
    brush.setStyle(Qt::SolidPattern);
    painter.setBrush(brush);
    painter.drawRect(rect);

    //绘制电池头
    brush.setColor(Qt::black);
    painter.setBrush(brush);
    rect.setRect(w/4+200,h/4+30,10,40);
    painter.drawRect(rect);

    //绘制电池柱
    pen.setStyle(Qt::NoPen);
    brush.setColor(Qt::green);
    painter.setBrush(brush);
    painter.setPen(pen);
    rect.setRect(w/4+5,h/4+5,190,90);
    painter.drawRect(rect);

	//绘制100%字样
    QString powStr="100%";
    setFont(QFont("times",24,Qt::black));
    QFont font(this->font());
    painter.setFont(font);
    pen.setStyle(Qt::SolidLine);
    painter.setPen(pen);

    QFontMetrics textSize(font);
    QRect textRect=textSize.boundingRect(powStr);
    painter.drawText(w/4+(200-textRect.width())/2,h/4+18+textRect.height(),powStr);
    event->accept();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世_生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值