1 引用 #include
2 创建绘制对象 QPainter *mQPainter;
3 绘制对象初始化 mQPainter =new QPainter(); //全程使用一个绘图对象(构造)
4 随机种子 qsrand(static_cast(time(nullptr))); //构造里
5 随机数获得 qrand()%n;
6 重写绘制函数 void paintEvent(QPaintEvent *event);
7 void MainWindow::paintEvent(QPaintEvent *event){
//避免未使用警告
Q_UNUSED(event);
//绘制开始
mQPainter->begin(this);
//设置画笔颜色
mQPainter->setPen(QColor(0,160,230));
//创建字体
QFont font;
//微软雅黑
font.setFamily(“Microsofr YaHei”);
//字体大小
font.setPointSize(25);
//斜体
font.setItalic(true);
//粗体
font.setBold(true);
//设置使用字体
mQPainter->setFont(font);
//绘制文本
mQPainter->drawText(50,100,“显示文字内容”);
//_______________________直线绘制____________________
//抗锯齿
mQPainter->setRenderHint(QPainter::Antialiasing,true);
//设置画笔颜色
mQPainter->setPen(QColor(0,255,255));
//QT自定义颜色
mQpainter->setPen(Qt::red);
//绘制直线,QPointF点到点, windth()和height()分别是窗口的宽度和高度
mQPainter->drawLine(QPointF(0,height()),QPointF(100,100));//width()/2,height()/2));
//_______________________矩形绘制____________________
//设置画笔颜色,线宽度
mQPainter->setPen(QPen(QColor(0,160,230),3));
//设置画刷颜色
mQPainter->setBrush(QColor(255,160,90));
//绘制矩形,从起点开始画宽高
mQPainter->drawRect(100,50,0,50);
//_______________________弧线(圆弧)绘制____________________
//矩形 左,上,宽,高
QRectF rect(50.0,250.0,160.0,90.0);
//起始角度
int startAngle=30*16;
//跨越度数
int spanAngle=120*16;
//设置画笔颜色,宽度
mQPainter->setPen(QPen(QColor(0,160,230),2));
//绘制弧线
mQPainter->drawArc(rect,startAngle,spanAngle);
//_______________________椭圆,圆形绘制_______________
//设置画笔颜色,宽度
mQPainter->setPen(QPen(QColor(0,160,230),2));
//设置笔刷的颜色 254,254,254,255白色 254,254,254,0图片底色
mQPainter->setBrush(QColor(254,254,254,0));
//绘制椭圆 圆心 x半径 y半径
mQPainter->drawEllipse(QPoint(100,300),50,20);
//设置画刷颜色
mQPainter->setBrush(QColor(255,160,90));
//绘制圆
mQPainter->drawEllipse(QPoint(100,400),40,40);
//_______________________多边形绘制________________
mQPainter->setPen(QColor(0,160,230));
mQPainter->setBrush(QColor(255,200,180));
//各个点的坐标 注:QPoint是点的值是int型,QPointF的值是float型。
static const QPointF points[4]={QPointF(230,40),QPointF(260,150),QPointF(350,160),QPointF(420,100)};
//绘制多边形
mQPainter->drawPolygon(points,4);
//_______________________点绘制_____________________
QPoint pt(200,200);
for(int i=0;i<20;i++){
for(int j=0;j<20;j++){
mQPainter->setPen(QColor(qrand()%255,qrand()%255,qrand()%255));
mQPainter->drawPoint(pt.rx()+j*5,pt.ry()+i*5);
}
}
//_________图片绘制
QImage image("./abc.png");
mQPainter->drawImage(300,200,image,0,0,50,50);
mQPainter->drawImage(300,200,image);
//创建图片对象
QImage image2;
//加载图片
image2.load("./abc.png");
//显示到屏幕的位置及宽高
QRect target(100,100,80,80);
//源图片显示区域
QRect source(0,0,image2.width(),image2.height());
//绘制图片 缩放图片
mQPainter->drawImage(target,image2,source);
//创建图片对象
QPixmap pix; // 或定义直接加载QPixmap pix("./abc.png");
//加载图片
pix.load("./abc.png");
//绘制图片 显示位置x,y 显示的宽高
mQPainter->drawPixmap(0,0,pix.width(),pix.height(),pix);
//注: drawPixmap与drawImage区别
//1)QPixmap主要是用于绘图,针对屏幕显示而最佳化设计,QImage主要是为图像I/O、图片访问和像素修改而设计的
//2)QPixmap依赖于所在的平台的绘图引擎,故例如反锯齿等一些效果在不同的平台上可能会有不同的显示效果,QImage使用Qt自身的绘图引擎,可在不同平台上具有相同的显示效果
//3)QImage可通过setPixpel()和pixel()等方法直接存取指定的像素
//注: 图片对象.width() .height() 代表图片的宽与高
//注: 绝对路径与相对路径 相对路径: ./ 当前路径 …/上一级目录
//绝对路径: e:\book\目录\text.jpg
//旋转图片
//移动mQPainter的位置,图片的旋转相对点
mQPainter->translate(50,50);
mQPainter->rotate(90);
// mQPainter位置返回
mQPainter->translate(-50,-50);
//绘制图片
//……
//旋转复位
mQPainter->rotate(-90);
//绘制对象复位
mQPainter->resetTransform();
//图片翻转
QImage img;
img.load("./pig1.png");
//水平翻转
img=img.mirrored(true,false);
//垂直翻转
img=img.mirrored(false,true);
//绘制结束
mQPainter->end();
}
// id MainWindow::paintEvent(QPaintEvent *event);默认调用一次,使用update(),重复调用
// 可以写 render()函数绘制 OnUpdate()处理逻辑 ,在paingEvent()中调用