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();
阅读全文
1 0
- Qt笔记_11
- Java学习笔记_11
- Java学习笔记_11.18
- JavaSE学习笔记_11:Java-字符串类
- Qt学习之路_11(简易多文档编辑器)
- TCP/IP网络编程 学习笔记_11 --多进程服务器端
- HeadFirstC笔记_11 网络与套接字
- 工作总结_11
- 10_11
- C++ Primer 学习笔记与思考_11 try..catch语句及相关疑点
- Qt 笔记
- Qt笔记
- QT笔记
- Qt笔记
- Qt笔记
- QT笔记
- Qt笔记
- QT笔记
- Django思维导图
- c++ thread pool 使用解析
- 2014-2015 ACM-ICPC, NEERC, Northern Subregional Contest I-Instruction(模拟)
- [JZOJ5374]永远的三日天下
- Quartus II和Modelsim的联合仿真(详细)
- Qt笔记_11
- 一次SSM项目记录
- A new boosting algorithm for improved time-series forecasting with recurrent neural networks
- RCNN学习笔记(3)-Fast-RCNN
- CodeForces 593A 2Char(贪心,模拟)
- uboot-的start.S详细注解及分析
- 最大似然估计(Maximum likelihood estimation)(通过例子理解)
- QT学习过程及简单串口和UDP通信demo开发过程及代码分享
- 洛谷 1189 SEARCH