[Qgis-developer] Is QGIS supports dynamic display?

Spartucus niubob at hotmail.com
Mon Sep 15 00:49:11 PDT 2014


Hi Martin,
	I implemented my own canvas item for SVG markers like you told me. But When
I created a object of custom canvas item in main, it broke down. The error
says 'This may be due to a corruption of the heap...', see more in
error.jpg.  I looked up for answers in exchange, which I found a similar
topic  here
<http://gis.stackexchange.com/questions/81465/how-to-refresh-layers-independently/81470#81470> 
, in the topic Nathan did exactly what I did. I don't know why.
<http://osgeo-org.1560.x6.nabble.com/file/n5161805/error.jpg>  
	Here is my code:
	
	//main.cpp
			int main(int argc, char ** argv) 
		{
			// Start the Application
			QgsApplication app(argc, argv, true);

			QgsMapCanvas * mypMapCanvas = new QgsMapCanvas();
			mypMapCanvas->setVisible(true);
			mypMapCanvas->refresh();

			QString fileName = "D:\\qgis\\svg\\symbol\\poi_tower_communications.svg";
			TFMapCanvasSvgItem mTFSvgItem(mypMapCanvas, fileName);
			mTFSvgItem.setPos(0, 0);
			return app.exec();
		}
		
	// Custom canvas item class -TFMapCanvasSvgItem.h	
		class TFMapCanvasSvgItem: public QgsMapCanvasItem
		{
		public:
			TFMapCanvasSvgItem(QgsMapCanvas* canvas, QString fileName = "");
			~TFMapCanvasSvgItem();

			void paint(QPainter* painter);
			QRectF boundingRect() const;
			void setFilePath(const QString& file);
			QString filePath() const {return mFilePath;}

		private:
			QSvgRenderer mSvgRenderer;
			QString mFilePath;
		};
		
	//TFMapCanvasSvgItem.cpp
			TFMapCanvasSvgItem::TFMapCanvasSvgItem(QgsMapCanvas* canvas, QString
fileName): QgsMapCanvasItem(canvas), mSvgRenderer(fileName)
		{
		}

		TFMapCanvasSvgItem::~TFMapCanvasSvgItem()
		{

		}

		void TFMapCanvasSvgItem::paint(QPainter* painter)
		{
			if (!painter)
			{
				return;
			}

			QRectF viewBox = mSvgRenderer.viewBoxF();
			if (viewBox.isValid())
			{
				setPos(this->toCanvasCoordinates(QgsPoint(0.0, 0.0)));
				mSvgRenderer.render(painter, viewBox);
			}
		}

		QRectF TFMapCanvasSvgItem::boundingRect() const
		{	
			QRectF viewBox = mSvgRenderer.viewBoxF();
			qreal halfWeight = viewBox.width() / 2;
			qreal halfHeight = viewBox.height() / 2;
			return QRectF(-halfWeight, -halfHeight, viewBox.width(),
viewBox.height());
		}

		void TFMapCanvasSvgItem::setFilePath(const QString& file)
		{
			mFilePath = file;
			mSvgRenderer.load(mFilePath);
		}



--
View this message in context: http://osgeo-org.1560.x6.nabble.com/Is-QGIS-supports-dynamic-display-tp5155726p5161805.html
Sent from the Quantum GIS - Developer mailing list archive at Nabble.com.


More information about the Qgis-developer mailing list