一、铺垫
1.Qt中给程序员提供的组件,基本上都是矩形,那如果程序员想画一个三角形和圆形;那就必须要使用绘画类;
二、绘画
注意:关于 paintEvent:paintEvent 会在以下情况下被触发:
1.控件⾸次创建.
2.控件被遮挡, 再解除遮挡.
3.窗⼝最⼩化, 再恢复.
4.控件⼤⼩发⽣变化时.
5.主动调⽤ repaint() 或者 update() ⽅法. (这两个⽅法都是 QWidget 的⽅法)
repaint此函数会立刻调用paintEvent;而update会将paintEvent放入放在事件循环队列中,不会立刻调用绘画事件
在实际开发中的应用:在开发中我们向客服端加载一张图片,事实上已经加载完成,但是开不见图片的样貌,鼠标点一下或者划过去,才会看见图片;这就是绘画事件未更新导致的;如果在开发中如果加载大量的图片或文字,需要及时的刷新一下;
2.1套路
//绘图工作就会放到这里来执行
QPainter painter(this);//定义在栈上的变量,不考虑释放的问题;this不是父对象,而是指定绘画的设 //备(往啥东西上画);
QFont font("微软雅黑",24);
painter.setFont(font);//通过画笔对象QPen设置绘制形状的颜色
//颜色、粗细、样式
QPen pen;
pen.setColor(QColor(255,0,0));//设置成红色的线条
pen.setWidth(5); //设置线条的粗细
pen.setStyle(Qt::DashLine);//设置线条的样式painter.setPen(pen); //让painter对象应用pen对象QBrush brush; //创建一个画刷对象
brush.setColor(QColor(0,255,0));
//brush.setStyle(Qt::SolidPattern);
brush.setStyle(Qt::Dense1Pattern);
painter.setBrush(brush);//画一个线段
painter.drawLine(20,20,200,20);
painter.drawLine(QPoint(20,100),QPoint(200,100));
painter.drawLine(20,20,40,40);//画一个矩形
painter.drawRect(10,10,20,20);//前两个参数是左上角的坐标,后两个是宽和高//画一个圆形
painter.drawEllipse(200,200,100,100); //正圆;前两个参数是左上角的坐标,后两个是宽和高
painter.drawEllipse(300,300,100,50); //椭圆;//画一个文字
painter.drawText(100,200,"你好");
2.2画一个多边形
void drawPolygon(const QPolygon &points, Qt::FillRule fillRule = Qt::OddEvenFill)
解释:A QPolygon object is a QVector<QPoint>:这一个多边形对象是一个放在顺序表中的点的集合;所以只需要按照操作Vector来操作就可以
套路:
QPainter painter(this);//建立绘画者对象
//1.设置画笔
painter.setPen(Qt::NoPen);
//2.设置画刷
painter.setBrush(QBrush(Qt::white));
//3.绘制三角形;
QPolygon polygon;
QPoint a(10,300);
QPoint b(10+80,300);
QPoint c(10+40,300+30);
polygon.append(a); //将三个点添加进去;
polygon.append(b);
polygon.append(c);
painter.drawPolygon(polygon);
三、图片类
图片类有好多,以我现在的能力,不可能说明白,只是会用一些
3.1设置按钮图标
QPixmap pixmap1("图片路径");
pixmap1=pixmap1.scaled(300,600);//将原来的图片按给的数据进行缩放;并返回
QPushButton* button=new QPushButton(this);
button->setIcon(QIcon(pixmap1));
此方式设置图标,是为了解决图标太大或太小,与按钮大小不相符的事实;若大小相同,则不会使用如此代码;
3.2使用绘画类操作图片
QPainter painter(this);QPixmap pixmap(":/rose.jpg");
//基础绘制
//painter.drawPixmap(0,0,pixmap);//图片缩放
//painter.drawPixmap(0,0,400,300,pixmap);//在(0,0)点缩放pixmap图片;//图片旋转,本质上是把QPainter对象进行了旋转,绘制出来的内容也就进行了旋转;
//是绕着0,0坐标系原点进行旋转的
//为了让图片显示出来;可以把Painter的起点移到中心来
painter.rotate(180);//旋转
painter.translate(-800,-600);//移动Painter中心点
painter.drawPixmap(0,0,800,600,pixmap);