qgis二次开发

qgis二次开发


发布日期: 2016-10-24 更新日期: 2016-10-24 编辑:xuzhiping 浏览次数: 10095

标签:

摘要: 第一步:新建Qt Application 项目,名称为:qgis2,完成后,其解决方案的文件如下所示 第二步,设计UI (1)双击,qgis2.ui文件,弹出qtDesigner设计器,添加相应菜单(对应的Action命名)如下图所示 (2)在面板...

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

01

第二步,设计UI

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

02

03

(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文件如下:

    #ifndef QGIS2_H  
    #define QGIS2_H

    #include   
    #include "ui_qgis2.h"  
    #include   
    #include   
    #include   
    #include   
    #include   
    #include   
    #include   
    #include   
    #include   
    #include  
    #include   


    class qgis2 : public QMainWindow,private Ui::qgis2Class  
    {  
        Q_OBJECT  

    public:  
        qgis2(QWidget *parent = 0, Qt::WFlags flags = 0);  
        ~qgis2();  
    public slots:  
        void zoomInMode();  
        void zoomOutMode();  
        void panMode();  
        void addLayer();  

    private:  
        Ui::qgis2Class ui;  
        QgsMapCanvas *mpMapCanvas;  
        QVBoxLayout *mpMapLayout;  
        QToolBar * mpMapToolBar;  
        QgsMapTool *mpPanTool;  
        QgsMapTool *mpZoomInTool;  
        QgsMapTool *mpZoomOutTool;  
    };  

    #endif // QGIS2_H  

第四步:修改qgis2.cpp文件

    #include "qgis2.h"

    qgis2::qgis2(QWidget *parent, Qt::WFlags flags)  
        : QMainWindow(parent, flags)  
    {  
        ui.setupUi(this);  
        QString myPluginsDir = "c:/Program Files/qgis1.7.0/plugins";  
        QgsProviderRegistry::instance(myPluginsDir);  

        mpMapCanvas= new QgsMapCanvas(0,0);  
        mpMapCanvas->freeze(false);  
        mpMapCanvas->enableAntiAliasing(true);  
        mpMapCanvas->setCanvasColor(QColor(255,255,255));  
        mpMapCanvas->useImageToRender(false);  
        mpMapCanvas->setVisible(true);  
        mpMapCanvas->refresh();  
        mpMapCanvas->show();  
        mpMapCanvas->setFocus();  



        mpMapLayout = new QVBoxLayout();  
        mpMapLayout->addWidget(mpMapCanvas);  
        ui.frameMap->setLayout(mpMapLayout);  
        setCentralWidget(ui.frameMap);  


        connect(ui.mpActionPan,SIGNAL(triggered()),this,SLOT(panMode()));  
        connect(ui.mpActionZoomIn,SIGNAL(triggered()),this,SLOT(zoomInMode()));  
        connect(ui.mpActionZoomOut,SIGNAL(triggered()),this,SLOT(zoomOutMode()));  
        connect(ui.mpActionAddLayer,SIGNAL(triggered()),this,SLOT(addLayer()));  


        mpMapToolBar=addToolBar(tr("File"));  

        mpMapToolBar->addAction(ui.mpActionAddLayer);  
        mpMapToolBar->addAction(ui.mpActionPan);  
        mpMapToolBar->addAction(ui.mpActionZoomIn);  
        mpMapToolBar->addAction(ui.mpActionZoomOut);  

        mpPanTool= new QgsMapToolPan(mpMapCanvas);  
        mpPanTool->setAction(ui.mpActionPan);  
        mpZoomInTool = new QgsMapToolZoom(mpMapCanvas,FALSE);  
        mpZoomInTool->setAction(ui.mpActionZoomIn);  
        mpZoomOutTool = new QgsMapToolZoom(mpMapCanvas,TRUE);  
        mpZoomOutTool->setAction(ui.mpActionZoomOut);  



    }  

    qgis2::~qgis2()  
    {  
        delete mpZoomOutTool;  
        delete mpZoomInTool;  
        delete mpPanTool;  
        delete mpMapToolBar;  
        delete mpMapCanvas;  
        delete mpMapLayout;  

    }  
    void qgis2::panMode()  
    {  
        mpMapCanvas->setMapTool(mpPanTool);  
    }  
    void qgis2::zoomInMode()  
    {  
        mpMapCanvas->setMapTool(mpZoomInTool);  
    }  
    void qgis2::zoomOutMode()  
    {  
        mpMapCanvas->setMapTool(mpZoomOutTool);  
    }  
    void qgis2::addLayer()  
    {  

        QString myLayerPath ="E:\\Qgis\\project\\qgis2\\data";
        QString myLayerBaseName = "test";  
        QString myPoviderName="ogr";  
        QList myLayerSet;  
        QgsVectorLayer* myLayer = new QgsVectorLayer(myLayerPath,myLayerBaseName,myPoviderName);  
        if (myLayer->isValid())  
        {  

        QgsSingleSymbolRenderer *myRenderer = new QgsSingleSymbolRenderer(myLayer->geometryType());  
        myLayer->setRenderer(myRenderer);  

        QgsMapLayerRegistry::instance()->addMapLayer(myLayer,true);  

        mpMapCanvas->setExtent(myLayer->extent());  

        myLayerSet.append(QgsMapCanvasLayer(myLayer));  
        mpMapCanvas->setLayerSet(myLayerSet);  
        }  
        else  
        {  
            return;  
        }  
    }  

第五步:修改main.cpp文件

    #include "qgis2.h"  
    #include 

    int main(int argc, char *argv[]) 
    { 
        QgsApplication a(argc, argv,TRUE);  
        qgis2 w; 
        w.show(); 
        return a.exec();
    } 

第六步:运行结果如下:

04

关注公众号
获取免费资源

随机推荐


Copyright © Since 2014. 开源地理空间基金会中文分会 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org