QGIS二次开发第二讲

第一步:新建Qt Application 项目,名称为:qgis2,完成后,其解决方案的文件如下所示

第二步,设计UI

(1)双击,qgis2.ui文件,弹出qtDesigner设计器,添加相应菜单(对应的Action命名)如下图所示

(2)在面板中央的centralWidget中拖入一个QFrame容器(用来包含qgsmapcanvas),命名为frameMap;

(3)在qtDesigner中,点击保存,退出。

(4)在项目解决方案中,有点点击qgis2.ui,点击编译,使其重新生成ui_qgis2.h这个文件

第三步:修改qgis2.h文件

(PS:在Generated Files中有个ui_qgis2.h文件,此文件是有qgis2.ui文件自动生成的,无需修改,如需用到此类,用法当如:Ui::qgis2Class,如下代码所示)

修改的qigs2.h文件如下:

[cpp]  view plain copy
  1. #ifndef QGIS2_H  
  2. #define QGIS2_H  
  3.   
  4. #include <QtGui/QMainWindow>  
  5. #include "ui_qgis2.h"  
  6. #include <qgsapplication.h>  
  7. #include <qgsproviderregistry.h>  
  8. #include <qgssinglesymbolrenderer.h>  
  9. #include <qgsmapcanvas.h>  
  10. #include <qgsvectorlayer.h>  
  11. #include <qgsmaptool.h>  
  12. #include <QtGui/QVBoxLayout>  
  13. #include <qgsmaplayerregistry.h>  
  14. #include <QtGui/QToolBar>  
  15. #include<qgsmaptoolpan.h>  
  16. #include <qgsmaptoolzoom.h>  
  17.   
  18.   
  19. class qgis2 : public QMainWindow,private Ui::qgis2Class  
  20. {  
  21.     Q_OBJECT  
  22.   
  23. public:  
  24.     qgis2(QWidget *parent = 0, Qt::WFlags flags = 0);  
  25.     ~qgis2();  
  26. public slots:  
  27.     void zoomInMode();  
  28.     void zoomOutMode();  
  29.     void panMode();  
  30.     void addLayer();  
  31.   
  32. private:  
  33.     Ui::qgis2Class ui;  
  34.     QgsMapCanvas *mpMapCanvas;  
  35.     QVBoxLayout *mpMapLayout;  
  36.     QToolBar * mpMapToolBar;  
  37.     QgsMapTool *mpPanTool;  
  38.     QgsMapTool *mpZoomInTool;  
  39.     QgsMapTool *mpZoomOutTool;  
  40. };  
  41.   
  42. #endif // QGIS2_H  

第四步:修改qgis2.cpp文件

[cpp]  view plain copy
  1. #include "qgis2.h"  
  2.   
  3. qgis2::qgis2(QWidget *parent, Qt::WFlags flags)  
  4.     : QMainWindow(parent, flags)  
  5. {  
  6.     ui.setupUi(this);  
  7.     QString myPluginsDir = "c:/Program Files/qgis1.7.0/plugins";  
  8.     QgsProviderRegistry::instance(myPluginsDir);  
  9.     //创建地图画布  
  10.     mpMapCanvas= new QgsMapCanvas(0,0);  
  11.     mpMapCanvas->freeze(false);  
  12.     mpMapCanvas->enableAntiAliasing(true);  
  13.     mpMapCanvas->setCanvasColor(QColor(255,255,255));  
  14.     mpMapCanvas->useImageToRender(false);  
  15.     mpMapCanvas->setVisible(true);  
  16.     mpMapCanvas->refresh();  
  17.     mpMapCanvas->show();  
  18.     mpMapCanvas->setFocus();  
  19.       
  20.       
  21.     //将窗口部件布局  
  22.     mpMapLayout = new QVBoxLayout();  
  23.     mpMapLayout->addWidget(mpMapCanvas);  
  24.     ui.frameMap->setLayout(mpMapLayout);  
  25.     setCentralWidget(ui.frameMap);  
  26.   
  27.     //创建Action行为  
  28.     connect(ui.mpActionPan,SIGNAL(triggered()),this,SLOT(panMode()));  
  29.     connect(ui.mpActionZoomIn,SIGNAL(triggered()),this,SLOT(zoomInMode()));  
  30.     connect(ui.mpActionZoomOut,SIGNAL(triggered()),this,SLOT(zoomOutMode()));  
  31.     connect(ui.mpActionAddLayer,SIGNAL(triggered()),this,SLOT(addLayer()));  
  32.   
  33.     //创建工具条功能  
  34.     mpMapToolBar=addToolBar(tr("File"));  
  35.       
  36.     mpMapToolBar->addAction(ui.mpActionAddLayer);  
  37.     mpMapToolBar->addAction(ui.mpActionPan);  
  38.     mpMapToolBar->addAction(ui.mpActionZoomIn);  
  39.     mpMapToolBar->addAction(ui.mpActionZoomOut);  
  40.     //创建maptool功能  
  41.     mpPanTool= new QgsMapToolPan(mpMapCanvas);  
  42.     mpPanTool->setAction(ui.mpActionPan);  
  43.     mpZoomInTool = new QgsMapToolZoom(mpMapCanvas,FALSE);  
  44.     mpZoomInTool->setAction(ui.mpActionZoomIn);  
  45.     mpZoomOutTool = new QgsMapToolZoom(mpMapCanvas,TRUE);  
  46.     mpZoomOutTool->setAction(ui.mpActionZoomOut);  
  47.   
  48.   
  49.       
  50. }  
  51.   
  52. qgis2::~qgis2()  
  53. {  
  54.     delete mpZoomOutTool;  
  55.     delete mpZoomInTool;  
  56.     delete mpPanTool;  
  57.     delete mpMapToolBar;  
  58.     delete mpMapCanvas;  
  59.     delete mpMapLayout;  
  60.   
  61. }  
  62. void qgis2::panMode()  
  63. {  
  64.     mpMapCanvas->setMapTool(mpPanTool);  
  65. }  
  66. void qgis2::zoomInMode()  
  67. {  
  68.     mpMapCanvas->setMapTool(mpZoomInTool);  
  69. }  
  70. void qgis2::zoomOutMode()  
  71. {  
  72.     mpMapCanvas->setMapTool(mpZoomOutTool);  
  73. }  
  74. void qgis2::addLayer()  
  75. {  
  76.     //读取矢量数据  
  77.     QString myLayerPath ="E:\\Qgis\\project\\qgis2\\data";// 此处换成自己的矢量文件  
  78.     QString myLayerBaseName = "test";  
  79.     QString myPoviderName="ogr";  
  80.     QList<QgsMapCanvasLayer> myLayerSet;  
  81.     QgsVectorLayer* myLayer = new QgsVectorLayer(myLayerPath,myLayerBaseName,myPoviderName);  
  82.     if (myLayer->isValid())  
  83.     {  
  84.   
  85.     QgsSingleSymbolRenderer *myRenderer = new QgsSingleSymbolRenderer(myLayer->geometryType());  
  86.     myLayer->setRenderer(myRenderer);  
  87.     //增加矢量数据到图层注册  
  88.     QgsMapLayerRegistry::instance()->addMapLayer(myLayer,true);  
  89.     //设置画布的extent  
  90.     mpMapCanvas->setExtent(myLayer->extent());  
  91.     //设置画布的图层数据集  
  92.     myLayerSet.append(QgsMapCanvasLayer(myLayer));  
  93.     mpMapCanvas->setLayerSet(myLayerSet);  
  94.     }  
  95.     else  
  96.     {  
  97.         return;  
  98.     }  
  99. }  

第五步:修改main.cpp文件

[cpp]  view plain copy
  1. #include "qgis2.h"  
  2. #include <QtGui/QApplication>  
  3.   
  4. int main(int argc, char *argv[])  
  5. {  
  6.     QgsApplication a(argc, argv,TRUE);  
  7.     qgis2 w;  
  8.     w.show();  
  9.     return a.exec();  
  10. }  

第六步:运行结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值