text: #ifndef QMAPPAINTER_H
  #define QMAPPAINTER_H
  
  #include <qpainter.h>
  #include <qpixmap.h>
  #include <qstring.h>
  #include <qwidget.h>
  #include <gmapping/utils/gvalues.h>
  #include <gmapping/utils/point.h>
  
  class QMapPainter :  public QWidget{
  	public:
  		QMapPainter( QWidget * parent = 0, const char * name = 0, WFlags f = 0);
  		virtual ~QMapPainter();
  	public:
  		template < typename Cell >
  		void setPixmap(unsigned int xsize, unsigned int ysize, Cell** values);
  		template < typename Iterator >
  		void drawPoints(const Iterator& begin, const Iterator& end, unsigned char r,  unsigned char g, unsigned char b);
  		void start(int period);
  	protected:
  		virtual void timerEvent(QTimerEvent * te);
  		virtual void resizeEvent(QResizeEvent *);
  		int timer;
  		virtual void paintEvent ( QPaintEvent *paintevent );
  		QPixmap * m_pixmap;
  };
  
  template <typename Cell>
  void QMapPainter::setPixmap(unsigned int xsize, unsigned int ysize, Cell** values){
  	QSize s(xsize, ysize);
  	m_pixmap->resize(s);
  	m_pixmap->fill(Qt::white);
  	QPainter painter(m_pixmap);
  	for (unsigned int x=0; x<(unsigned int)xsize; x++)
  		for (unsigned int y=0; y<(unsigned int)ysize; y++){
  			double v=(double) values[x][y];
  			
  			if (v>=0){
  				unsigned int grayVal=(unsigned char) (255-(unsigned char)(255*v));
  				painter.setPen(QColor(grayVal, grayVal, grayVal));
  			} else {
  				painter.setPen(QColor(255, 100, 100));
  			}
  			painter.drawPoint(x,ysize-y);
  		}
  }
  
  template < typename Iterator >
  void QMapPainter::drawPoints(const Iterator& begin, const Iterator& end, unsigned char r,  unsigned char g, unsigned char b){
  	QPainter painter(m_pixmap);
  	painter.setPen(QColor(r,g,b));
  	for (Iterator it=begin; it!=end; it++){
  		GMapping::IntPoint p=(GMapping::IntPoint)*it;
  		painter.drawPoint(p.x, height()-p.y);
  	}
  }
  
  #endif
  
  