Всем привет!
Делаю класс Canvas, что бы на нем можно было рисовать.
Столкнулся с такой проблемой. Если QPainterом нарисовать несколько раз, то на виджете отобразятся только последнее изменение при QPaintEvent.
Как я только не пытался это обойти. Но ничего не выходит. Подскажите куда копать.
Прилагаю код хедера
#ifndef CANVAS_H
#define CANVAS_H
#include <QImage>
#include <QWidget>
#include <QPainter>
#include <QPen>
#include <QBrush>
#include <QLine>
#include <QRect>
class Canvas : public QWidget
{
Q_OBJECT
protected :
enum Shape { Line , Rect } ;
Shape shape ;
QBrush brush ;
QPen pen ;
QLine line ;
QRect rect ;
virtual void paintEvent( QPaintEvent * event )
{
Q_UNUSED( event ) ;
QPainter painter( this ) ;
painter.setBrush( brush ) ;
painter.setPen( pen ) ;
switch ( shape )
{
case Line :
{
painter.drawLine( line ) ;
break ;
}
case Rect :
{
painter.drawRect( rect ) ;
break ;
}
}
}
public :
/*
Canvas()
{
}
*/
void setBrush( QBrush _brush )
{
brush = _brush ;
}
void setPen( QPen _pen )
{
pen = _pen ;
}
void drawLine( QLine _line )
{
shape = Line ;
line = _line ;
update() ;
}
void drawRect( QRect _rect )
{
shape = Rect ;
rect = _rect ;
update() ;
}
} ;
#endif
И код мэйна
#include <QApplication>
#include "canvas.h"
int main( int argc , char *argv[] )
{
QApplication app( argc , argv ) ;
Canvas * canvas = new Canvas() ;
canvas->show() ;
canvas->drawLine( QLine( 0 , 0 , 10 , 10 ) ) ; // Это
//canvas->drawRect( QRect( 100 , 100 , 300 , 300 ) ) ;// НЕ
canvas->setPen( QPen( Qt::red ) ) ; //Рисуется
canvas->setBrush( QBrush( Qt::green ) ) ; //
canvas->drawRect( QRect( 50 , 50 , 200 , 100 ) ) ;
canvas->setBrush( QBrush( Qt::blue ) ) ;
canvas->drawRect( QRect( 80 , 80 , 230 , 130 ) ) ; // Рисуется только это
return app.exec() ;
}
Спасибо за внимание!