重点:每个 QWidget都自带的功能,继承了QPainteDevice都可以使用QPainter来进行绘图。我们需要调用paintEvent绘制事件,这个事件QWidget这个类自带的事件。重写这个事件:如果父类有某个办法,此时这个子类需要有一个更跟父类同样方法名称的。
实例化对象写法:QQPainter painter(this);//相当于QPainter * painter=new QPainter(this);
画直线举例:painter.drawLine(0,20,300,20); //类似于直角坐标。0,20表示起点;300,20表示终点。给定 2 个点,使用 drawLine() 画一条线段
void MainWidget::paintEvent(QPaintEvent *) {
QPainter painter(this);
painter.translate(30, 30);
int w = 300;
int h = 210;
int gap = 30;
// 画水平线
for (int y = 0; y <= h; y += gap) {
painter.drawLine(0, y, w, y);
}
// 画垂直线
for (int x = 0; x <= w; x += gap) {
painter.drawLine(x, 0, x, h);
}
}
此例子为用drawLine用来画网格线。
画弧线:
painter.drawArc(30,30,100,100,30 * 16,140 *16);//30,30表示开始绘制位置;100,100,表示弧度绘制范围宽高;30 * 16表示起始弧度;140 * 16表示跨越弧度;注意:角度 * 16=弧度。
设置渲染模式(就是让曲线、弧线更为平缓),使得平滑渲染:
painter.setRenderHint(QPianter::Antialiasing,true); //QPainter::Antialiasing代表平滑
画饼图(类似弧):
painter.drawPie(50,50,100,100,0,90 * 16)//50,50为起始位置;100,100为宽高;0为起始弧度;90为结束弧度
画矩形:
painter.drawRect(200,100,150,100)//200,100表示绘制起点,150,100表示绘制宽高
填充绘制:
painter.fillRect(100,100,100,100,QBrush(QColor(225,0,0)));//QBrush表示笔刷对象,QColor表示颜色对象
绘制坐标轴:
//绘制出一个坐标加折线图
//原点
painter.drawText(10,210,"0");
//绘制X轴
painter.drawLine(10,200,310,200);
//分割X轴
for(int i=2;i<31;i++) //i=2是因为开始原点不用分割,i<31从第三个数来
{
painter.drawLine(10*i,195,10*i,200); //195-200之间的5是X轴上突出刻量的点(绘出来的点)
if(i%2==0) //就是偶数的时候才画一个点,这样就不用画点太密集不好看
painter.drawText(10*i,210,QString::number(10*i));
}
painter.drawText(300,210,"x轴"); //“X轴”会显示再这条线的后面,但是从美观方面来讲“X轴”显示在这条线的里面一点且下面,所以是300,210
//绘制Y轴,Y轴的起点就是X轴的起点
painter.drawLine(10,200,10,10);
//分割Y轴
for(int i=2;i<20;i++)
{
painter.drawLine(10,10*i,15,10*i);
if(i%2==0);
painter.drawText(15,210*(20-i),QString::number(10*i));
}
painter.drawText(10,10,"Y轴");
//生成随机数,产生[0,190]之间的随机数
int x1,y1,x2,y2;
x1=10*i;
y1=qrand()%191;//表示Y轴的值
for(int i=1;i<30;i++)
{
x2=10*(i+1);
y2=qrand()%191;//表示Y轴的值
painter.setPen(QColor(0,0,0);
painter.drawLine(x1,y1,x2,y2);
x1=x2;
y1=y2;
painter.setPen(QColor(225,0,0);
painter.setFont(QFont("隶书",30));
//画点
painter.drawPoint(QPoint(x2,y2));
}
标签:QT,16,30,画图,弧度,100,绘制,painter
From: https://www.cnblogs.com/zongmeijiezuishuai/p/17629987.html