将QGIS插件逻辑拉入独立应用程序

时间:2016-09-26 21:03:45

标签: python qt pyqt qt-creator qgis

我是QT,Python和QGIS的新手。我安装了“插件生成器”插件并生成了一个Dockwidget。我能够使用qtcreator更改小部件,并且正在学习如何使用我自己的插件实现信号和插槽。

现在,我的问题。有没有简单的方法可以删除QGIS iface并在QGIS之外使用我的插件逻辑?我目前实际上并没有使用任何PyQGIS库,但我希望保留我的QT接口和“插件生成器”生成的Python代码/结构。有没有办法做到这一点?

感谢。

1 个答案:

答案 0 :(得分:0)

是的,有办法做到这一点。但到目前为止,我发现我们需要将整个Qgis库复制到最终的软件包中。在代码中为qgis应用程序设置正确的路径非常重要,如下所示:

QgsApplication.setPrefixPath(r"C:\OSGeo4W\apps\qgis", True)
QgsApplication.initQgis()
QgsProject.instance().setFileName(strProjectName)

我们还需要编写文件并在最后关闭它

QgsProject.instance().write()
QgsApplication.exitQgis()

这是我创建的独立包的快照。代码需要对某些变量进行一些修改才能工作。

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
from qgis.gui import *
import os, datetime

class CreateQgs():

    def initQgsFile(self, outputFolder, stopRadius):

        strProjectName = str(outputFolder) + "\\" + "PhotoLocationMap.qgs"
        QgsApplication.setPrefixPath(r"C:\OSGeo4W\apps\qgis", True)
        QgsApplication.initQgis()
        QgsProject.instance().setFileName(strProjectName)

        highwayShapeFilePath = "C:/Shapefiles/Highway.shp"
        arterialShapeFilePath = "C:/Shapefiles/StreetsMajor.shp"

        highwayLayer = QgsVectorLayer(self.highwayShapeFilePath, 'HighwayDB' , 'ogr')
        arterialLayer = QgsVectorLayer(self.arterialShapeFilePath, 'ArterialDB', 'ogr')

        symbols = highwayLayer.rendererV2().symbols()
        sym = symbols[0]
        sym.setColor(QColor.fromRgb(255,94,94))
        highwayLayer.triggerRepaint()

        symbols = arterialLayer.rendererV2().symbols()
        sym = symbols[0]
        sym.setColor(QColor.fromRgb(76,138,245))
        arterialLayer.triggerRepaint()

        mapInstance = QgsMapLayerRegistry.instance()

        mapInstance.instance().addMapLayer(arterialLayer)
        mapInstance.instance().addMapLayer(highwayLayer) 

        QgsProject.instance().write()
        QgsApplication.exitQgis()

def unitTest():
    app = QgsApplication(sys.argv, True)
    photoFolderPath = 'C:\Test\QGis\TestPics'
    CreateQgsFile = CreateQgs()
    CreateQgsFile.initQgsFile(photoFolderPath, 128)

if __name__ == "__main__":
    unitTest()