logplus/DataMgr/src/view.cpp
2026-01-29 16:57:06 +08:00

109 lines
3.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "view.h"
#include <QPainter>
MyView::MyView(QWidget *parent) : QWidget(parent)
{
}
void MyView::paintEvent(QPaintEvent *event)
{
/* QPainter paint;
paint.begin(this);
paint.setBrush(Qt::white);
paint.drawRect(plotrec);
QString str=m_CurveName+"曲线数值分布图";
QRect rec=QRect(plotrec.left(),plotrec.top(),plotrec.width(),30);
paint.drawText(rec, Qt::AlignHCenter| Qt::AlignVCenter,str);
paint.end();*/
QPainter paint;
paint.begin(this);
// paint.setBrush(Qt::lightGray);
//paint.drawRect(plotrec);
QRect plotrec=widgetRec;
QRect rec1=widgetRec;
QString str=m_CurveName+"曲线数值分布图";
QRect rec=QRect(plotrec.left(),plotrec.top(),plotrec.width(),30);
paint.drawText(rec, Qt::AlignHCenter| Qt::AlignVCenter,str);
QRect rthy=plotrec;
rthy.adjust(70,40,-60,-60);
int x0=rthy.left(),y0=rthy.bottom(),h=rthy.height(),w=rthy.width();
int ptotal=point[0],pmax=point[0];
for(int i=1;i<10*m_SmallGrid;i++)
{
ptotal+=point[i];
if(pmax<point[i])pmax=point[i];
}
float hmax=100.*(float)pmax/(float)ShowPoint;
plotrec.setTop(rthy.bottom()+16);
for(int i=0;i<=10;i++)
{
//横线
paint.drawLine(x0,y0-i*h/10,x0+w,y0-i*h/10);
str=QString::number(i*m_Ymax/10.,'f',1);
if((m_Ymax/10.)==int(m_Ymax/10))str=QString::number(i*m_Ymax/10.);//测试520
paint.drawText(x0-25,y0-i*h/10+10,str);
//纵线
paint.drawLine(x0+i*w/10,y0-h,x0+i*w/10,y0);
if(i%2==0)
{
plotrec.setLeft(x0+(i-1)*w/10);
plotrec.setRight(x0+(i+1)*w/10);
str=QString::number(m_Xmin+i*(m_Xmax-m_Xmin)/10.);
paint.drawText(plotrec, Qt::AlignHCenter| Qt::AlignTop,str);
}
}
//写x、y轴坐标名
rec1.adjust(0,40,rec1.left()+40-rec1.right(),0);
//rec1.top+=40;
//rec1.right=rec1.left+40;
paint.drawText(rec1,Qt::AlignHCenter| Qt::AlignTop,"pp");//"频");
rec1.adjust(0,20,0,0);//rec1.top+=20;
paint.drawText(rec1,Qt::AlignHCenter| Qt::AlignTop,"LL");//"率");//dc.DrawText("",rec1,DT_SINGLELINE|DT_TOP|DT_CENTER);
rec1.adjust(0,20,0,0);//rec1.top+=20;
paint.drawText(rec1,Qt::AlignHCenter| Qt::AlignTop,"(%)");//dc.DrawText("",rec1,DT_SINGLELINE|DT_TOP|DT_CENTER);
plotrec.setLeft(x0);plotrec.setBottom(plotrec.bottom()-10);
paint.drawText(plotrec,Qt::AlignHCenter| Qt::AlignBottom,m_CurveName+m_CurveUnit);//dc.DrawText(,plotrec,DT_SINGLELINE|DT_BOTTOM|DT_CENTER);
//CBrush *oldBrush=dc.SelectObject(&GreenBrush);
for(int i=0;i<10*m_SmallGrid;i++)
{
plotrec.setLeft(x0+i*w/(10*m_SmallGrid));//plotrec.left=x0+i*w/(10*m_SmallGrid);//注意i*w/(10*m_SmallGrid)和w/(10*m_SmallGrid)*i误差挺大
plotrec.setRight(x0+(i+1)*w/(10*m_SmallGrid));
plotrec.setBottom(y0);
float y=(float)point[i]/(float)pmax;//y=(float)point[i]/(float)pmax;
plotrec.setTop(y0-y*h*hmax/m_Ymax);
float left=m_Xmin+i*(m_Xmax-m_Xmin)/(10*m_SmallGrid);
float right=m_Xmin+(i+1)*(m_Xmax-m_Xmin)/(10*m_SmallGrid);
if(left>=m_Xmax2||right<=m_Xmin2)paint.setBrush(Qt::green);
//if(i<ibegin||i>iend)dc.FillRect(plotrec,&GreenBrush);
else paint.setBrush(Qt::red);
paint.drawRect(plotrec);
}
if(!m_DrawLjpl) {
paint.end();
return;
}
//画累计频率线
int pp=0;
QPen pen(Qt::red);
pen.setStyle(Qt::SolidLine);
pen.setWidth(2);
paint.setPen(pen);
float x1=x0,y1=y0;
for(int i=0;i<10*m_SmallGrid;i++)
{
pp+=point[i];
float x=x0+(float)((i+1.)*w/(10.*m_SmallGrid));
float y=(float)pp/(float)ShowPoint;//ptotal;
paint.drawLine(x1,y1,x,y0-y*h);
x1=x,y1=y0-y*h;
}
paint.end();
}