Qt笔记_11

来源:互联网 发布:淘宝有什么好的男装店 编辑:程序博客网 时间:2024/06/16 18:21

绘图–2D

基于QPainter、QPaintDevice和QPaintEngine这三个类。

基本绘制与填充

  • QPainter可以在继承自QPainteDevice类的任何对象上进行绘制。
  • QPainter一般在一个部件重绘事件的处理函数中进行绘制,首先要创建QPainter对象,然后进行图形的绘制,最后销毁QPainter对象。
  • 头文件< QPainter >
  • QPen类为QPainter提供了画笔来绘制线条和形状轮廓
  • QBrush类提供了画刷来对图形进行填充,颜色,填充模式。
  • 渐变填充需要QGradient类和QBrush一起指定。有三种方式线性渐变、辐射渐变、锥形渐变。

坐标系统

  • QPainter::scale()函数缩放坐标系统
  • QPainter::rotate()顺时针旋转坐标
  • QPainter::translate()平移坐标系统
  • QPainter::shear()围绕原点扭曲坐标系统
void Widget::paintEvent(QPaintEvent *){    QPainter painter(this);    painter.drawLine(QPoint(0, 0), QPoint(100, 100));    //创建画笔    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("../mydrawing/yafeilinux.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!"));}

绘制图像

QImage、QPixmap、QBitmap、QPicture都可以处理图像数据。头文件同名

  • QImage主要用来进行I/O处理,也可以直接访问和操作像素。支持BMP、GIF、JPG、JPEG、PNG、PBM、PGM、PPM、XBM、XPM。
    QPainter painter(this);    QImage image;    // 加载一张图片    image.load("../mydrawing3/image.png");    // 输出图片的一些信息    qDebug() << image.size() << image.format() << image.depth();    // 在界面上绘制图片    painter.drawImage(QPoint(10, 10), image);    // 获取镜像图片    QImage mirror = image.mirrored();    // 将图片进行扭曲    QTransform transform;    transform.shear(0.2, 0);    QImage image2 = mirror.transformed(transform);    painter.drawImage(QPoint(10, 160), image2);    // 将镜像图片保存到文件    image2.save("../mydrawing3/mirror.png");
  • QPixmap用来显示图像。对图像进行缩放时使用函数
  • QBitmap只能用来显示黑白图像,是QPixmap的子类。QPixmap::scaled(),参数为缩放后的大小、宽高比模式、转换模式。
    宽高比模式有3种
    • Qt::KeepAspectRatio保持宽高比,在矩形内显示全部。
    • Qt::IgnoreAspectRatio不保持宽高比,自由缩放。
    • Qt::KeepAspectRatioByExpanding保持宽高比,填满矩形。
QPixmap pix = grab.scaled(label->size(), Qt::KeepAspectRatio,                                Qt::SmoothTransformation);    label->setPixmap(pix);
    QPainter painter(this);    QPixmap pix;    pix.load("../mydrawing3/yafeilinux.png");    painter.drawPixmap(0, 0, pix.width(), pix.height(), pix);    painter.setBrush(QColor(255, 255, 255, 100));    painter.drawRect(0, 0, pix.width(), pix.height());
  • QPicture记录并重演QPicture命令。
    使用图片格式为 .pic
    记录QPicture命令:
QPicture picture;QPainter painter;painter.begin(&picture);painter.drawEllipse(10,20,80,70);painter.end();picture.save("mypicture.pic");

重演QPainter命令:

QPainter picture;picture.load("mypicture.pic");QPainter painter;painter.begin(&myimage);painter.drawPicture(0,0,picture);painter.end();