QT::绘图

 

Qt提供了强大的2D绘图系统,可以使用相同的API在屏幕和设备上绘图
主要基于 Qpainter QPainterDevice QPaintEngine 这三个类。
Qpainter 主要执行绘图操作
QPainterDevice提供绘图设备,是一个二维设备的抽象。可以使用Qpainter在其上绘图。
QPaintEngine提供一些接口,用于Qpainter在不同设备上绘图。

 

//Qpainter一般在一个部件上重绘事件PaintEvent()中绘制,首先要创建Qpainter对象,在进行图形绘制最后销毁对象。
void Widget::paintEvent(QPaintEvent *event)
{
  QPainter painter(this);
  //绘制线条
  painter.drawLine(QPoint(0, 0), QPoint(100, 100));
}
//等价于
void Widget::paintEvent(QPaintEvent *event)
{
  painter painter;
  painter.begin(this);
  painter.drawLine(QPoint(0, 0), QPoint(100, 100));
  painter.end;
}

 

//创建画笔
QPen pen(Qt::green, 5, Qt::DotLine, Qt::RoundCap, Qt::RoundJoin);
//使用画笔
painter.setPen(pen);
QRectF rectangle(70.0, 40.0, 80.0, 60.0);
int startAngle = 30 * 16;
int spanAngle = 120 * 16;
//绘制圆弧
painter.drawArc(rectangle, startAngle, spanAngle);

 

//重新设置画笔
pen.setWidth(1);
pen.setStyle(Qt::SolidLine);
painter.setPen(pen);
//绘制一个矩形
painter.drawRect(160, 20, 50, 40);

 

//创建画刷
QBrush brush(QColor(0, 0, 255), Qt::Dense4Pattern);
//使用画刷
painter.setBrush(brush);
//绘制椭圆
painter.drawEllipse(220, 20, 50, 50);
//设置纹理
brush.setTexture(QPixmap("../xx.png"));

 

//重新使用画刷
painter.setBrush(brush);
//定义四个点
static const QPointF points[4] = {
    QPointF(270.0, 80.0),
    QPointF(290.0, 10.0),
    QPointF(350.0, 30.0),
    QPointF(390.0, 70.0)
};
//使用四个点绘制多边形
painter.drawPolygon(points, 4);

 

//使用画刷填充一个矩形区域
painter.fillRect(QRect(10, 100, 150, 20), QBrush(Qt::darkYellow));
//擦除一个矩形区域的内容
painter.eraseRect(QRect(50, 0, 50, 120));

//线性渐变
QLinearGradient linearGradient(QPointF(40, 190), QPointF(70, 190));
//插入颜色
linearGradient.setColorAt(0, Qt::yellow);
linearGradient.setColorAt(0.5, Qt::red);
linearGradient.setColorAt(1, Qt::green);
//指定渐变区域以外的区域的扩散方式
linearGradient.setSpread(QGradient::RepeatSpread);
//使用渐变作为画刷
painter.setBrush(linearGradient);
painter.drawRect(10, 170, 90, 40);

 

//辐射渐变
QRadialGradient radialGradient(QPointF(200, 190), 50, QPointF(275, 200));
radialGradient.setColorAt(0, QColor(255, 255, 100, 150));
radialGradient.setColorAt(1, QColor(0, 0, 0, 50));
painter.setBrush(radialGradient);
painter.drawEllipse(QPointF(200, 190), 50, 50);

 

//锥形渐变
QConicalGradient conicalGradient(QPointF(350, 190), 60);
conicalGradient.setColorAt(0.2, Qt::cyan);
conicalGradient.setColorAt(0.9, Qt::black);
painter.setBrush(conicalGradient);
painter.drawEllipse(QPointF(350, 190), 50, 50);

//画笔使用线性渐变来绘制直线和文字
painter.setPen(QPen(linearGradient,2));
painter.drawLine(0, 280, 100, 280);
painter.drawText(150, 280,  tr("helloQt!"));

 

posted @ 2021-02-03 23:12  osbreak  阅读(329)  评论(0编辑  收藏  举报