void CannonField::paintEvent(QPaintEvent *) { // ------------------------------------- // QPaintEvent包含一个必须被刷新的窗口部件的区域 // QPainter默认只能在paintEvent里面调用 // ------------------------------------- //QString s = "Angle = " + QString::number(ang); //QPainter p(this); //p.drawText(200, 200, s); QPainter p(this); //当QPainter填满一个矩形,圆或者其他无论什么,它会用它的画刷填满这个图形,这里为蓝色 p.setBrush(Qt::blue); //NoPen表示什么都不画. p.setPen(Qt::PenStyle::NoPen); //这个移的是坐标系,相当于rect()的QRect,在做所有的运算时,都先要offerset(-0, -rect().bottom()) //所以有效区域总是rect()的y为负值,x还是正值(-0) //-- hgy notes. p.translate(0, rect().bottom()); //0为起始角度(实际单位为1/16度),零度位在3点钟方向,所以90*16为90度 //QRect中x从(-35到0)这一段由上面分析知是无效的,所以不会绘出来, // -- hgy notes. p.drawPie(QRect(-35,-35, 70, 70),0, 90*16); //rotate是旋轩坐标系. p.rotate(-ang); p.drawRect(QRect(35, -8, 15, 8)); }
1.绘制圆和椭圆
p.setPen(QPen(Qt::yellow, 4, Qt::SolidLine)); p.drawEllipse(0, 100, 100, 100);
第1,2个参数分别表示圆/椭圆距左上角的像素数。第3,4个参数表示圆/椭圆的宽度和高度。更加确切地表述,这个圆或椭圆是在矩形中,这个矩形的左上角的顶点在坐标轴中的位置为(0,100),这个圆或椭圆的中心为这个矩形的中心
2.绘制圆角矩形
p.setPen(QPen(Qt::yellow, 4, Qt::SolidLine)); p.drawRoundRect(0, 100, 100, 100, 50, 50);
最后两个参数决定角的圆度。xRadius and yRadius are specified in percentage of half the rectangle's
width and height respectively, and should be in the range 0.0 to 100.0.也就是长宽一半的百分比,都为100,那就变成圆了!
3.绘制扇形图
p.setPen(QPen(Qt::yellow, 4, Qt::SolidLine)); p.drawPie(0,0, 70, 70, 0, 90*16);
前四个参数定义圆(与drawEllipse()函数相同)。后两个参数定义圆的样式。0为起始角度(实际单位为1/16度),90*16为扇形所展开的角度90度(单位也为1/16度),
零度位在3点钟方向。
4.绘制弦
p.setPen(QPen(Qt::yellow, 4, Qt::SolidLine)); p.drawChord(0,0, 70, 70,0, 90*16);
参数和drawPie完全一致。
5.绘制圆弧
p.setPen(QPen(Qt::yellow, 4, Qt::SolidLine)); p.drawArc(0,0, 70, 70,0, 90*16);
参数和drawPie完全一致。