plotScene=new QGraphicsScene(0,0,700,700); this->setScene(plotScene);
pa = new PolarAxis(350,350,300,cRotate); plotScene->addItem(pa);
pa = new PolarAxis(350,350,300,cRotate); pm=new QPixmap(rectScene->height(),rectScene->width()); pa->setPixmap(pm); //мой метод в котором адрес Pixmap передается в поле данных QPixmap* в PolarAxis plotScene->addItem(pa);
QPainter *p=new QPainter(pm); //pm - адрес того самого Pixmap'a//всяческое рисованиеp->end();
if(!drawOk) drawToBuff(); //читай: если не нарисовано - рисуй! p->drawPixmap(0,0,*pm);
void PolarAxis::paint(QPainter *p, const QStyleOptionGraphicsItem *option,QWidget *widget){ p->setMatrix(scale_matrix); p->drawEllipse(x-rad,y-rad,rad*2,rad*2); p->drawLine(x,y,x,y-rad); QPen *dotPen=new QPen(Qt::DashDotLine); dotPen->setWidthF(0.3); QVector<qreal> dashes; dashes <<10 <<10; dotPen->setDashPattern(dashes); p->setPen(*dotPen); for (int i=rad-15;i>0;i-=15) p->drawEllipse(x-i,y-i,i*2,i*2); for (int i=0; i>-360; i-=10){ p->drawLine(x,y,x+rad*cos(i*pi/180),y+rad*sin(i*pi/180)); double x2=x+(rad+20)*cos(i*pi/180+90*pi/180+rotate*pi/180)-15; double y2=y+(rad+20)*sin(i*pi/180+90*pi/180+rotate*pi/180)-7.5; p->drawText(x2,y2,30,15,Qt::AlignCenter,QString("%1").arg(abs(i))); }}
void PolarPlot::resizeEvent(QResizeEvent *re){ QRect *rct=new QRect(0,0,re->size().height()-25,re->size().width()-25); plotScene->setSceneRect(*rct); double h1=re->size().height(); double h2=re->oldSize().height(); double koef=h1/h2; pa->rescale(koef); //в pa объект класса PolarAxis }//----------------------void PolarAxis::rescale(float f){ scale_matrix.scale(f,f); //scale_matrix типа QMatrix, используется первой строчкой в PolarAxis::paint}
QRectF PolarAxis::boundingRect() const{ return QRectF(0,0,rad*2+80,rad*2+80);}
C++ (Qt)void PolarAxis::paint(QPainter *p, const QStyleOptionGraphicsItem *option,QWidget *widget){ p->setMatrix(scale_matrix); p->drawEllipse(x-rad,y-rad,rad*2,rad*2); p->drawLine(x,y,x,y-rad); QPen *dotPen=new QPen(Qt::DashDotLine); // Зачем? dotPen->setWidthF(0.3); QVector<qreal> dashes; dashes <<10 <<10; dotPen->setDashPattern(dashes); p->setPen(*dotPen); for (int i=rad-15;i>0;i-=15) p->drawEllipse(x-i,y-i,i*2,i*2); for (int i=0; i>-360; i-=10){ p->drawLine(x,y,x+rad*cos(i*pi/180),y+rad*sin(i*pi/180)); double x2=x+(rad+20)*cos(i*pi/180+90*pi/180+rotate*pi/180)-15; double y2=y+(rad+20)*sin(i*pi/180+90*pi/180+rotate*pi/180)-7.5; p->drawText(x2,y2,30,15,Qt::AlignCenter,QString("%1").arg(abs(i))); }}
C++ (Qt)void PolarPlot::resizeEvent(QResizeEvent *re){ QRect *rct=new QRect(0,0,re->size().height()-25,re->size().width()-25); // Те же грабли plotScene->setSceneRect(*rct); double h1=re->size().height(); double h2=re->oldSize().height(); double koef=h1/h2; pa->rescale(koef); //в pa объект класса PolarAxis }