mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-08 00:06:51 -05:00
[DBManager] remove layers from QgsMapLayerRegistry once refreshing a table, previewing a different layer or closing the DBManager main window (fix #12938)
This commit is contained in:
parent
e6f4fa6bad
commit
eea81e81c5
@ -58,6 +58,8 @@ class DBManager(QMainWindow):
|
|||||||
|
|
||||||
def closeEvent(self, e):
|
def closeEvent(self, e):
|
||||||
self.unregisterAllActions()
|
self.unregisterAllActions()
|
||||||
|
# clear preview, this will delete the layer in preview tab
|
||||||
|
self.preview.loadPreview(None)
|
||||||
|
|
||||||
# save the window state
|
# save the window state
|
||||||
settings = QSettings()
|
settings = QSettings()
|
||||||
@ -82,6 +84,8 @@ class DBManager(QMainWindow):
|
|||||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||||
try:
|
try:
|
||||||
self.reloadButtons()
|
self.reloadButtons()
|
||||||
|
# clear preview, this will delete the layer in preview tab
|
||||||
|
self.preview.loadPreview(None)
|
||||||
self.refreshTabs()
|
self.refreshTabs()
|
||||||
except BaseError as e:
|
except BaseError as e:
|
||||||
DlgDbError.showError(e, self)
|
DlgDbError.showError(e, self)
|
||||||
|
|||||||
@ -38,6 +38,7 @@ class LayerPreview(QgsMapCanvas):
|
|||||||
|
|
||||||
self.item = None
|
self.item = None
|
||||||
self.dirty = False
|
self.dirty = False
|
||||||
|
self.currentLayer = None
|
||||||
|
|
||||||
# reuse settings from QGIS
|
# reuse settings from QGIS
|
||||||
settings = QSettings()
|
settings = QSettings()
|
||||||
@ -46,8 +47,6 @@ class LayerPreview(QgsMapCanvas):
|
|||||||
zoomFactor = settings.value("/qgis/zoom_factor", 2, type=float)
|
zoomFactor = settings.value("/qgis/zoom_factor", 2, type=float)
|
||||||
self.setWheelAction(QgsMapCanvas.WheelAction(action), zoomFactor)
|
self.setWheelAction(QgsMapCanvas.WheelAction(action), zoomFactor)
|
||||||
|
|
||||||
self._clear()
|
|
||||||
|
|
||||||
def refresh(self):
|
def refresh(self):
|
||||||
self.setDirty(True)
|
self.setDirty(True)
|
||||||
self.loadPreview(self.item)
|
self.loadPreview(self.item)
|
||||||
@ -80,19 +79,18 @@ class LayerPreview(QgsMapCanvas):
|
|||||||
self.disconnect(self.item, SIGNAL('aboutToChange'), self.setDirty)
|
self.disconnect(self.item, SIGNAL('aboutToChange'), self.setDirty)
|
||||||
except RuntimeError:
|
except RuntimeError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
self.item = None
|
self.item = None
|
||||||
self.dirty = False
|
self.dirty = False
|
||||||
|
self._loadTablePreview(None)
|
||||||
self.currentLayerId = None
|
|
||||||
self.setLayerSet([])
|
|
||||||
|
|
||||||
def _loadTablePreview(self, table, limit=False):
|
def _loadTablePreview(self, table, limit=False):
|
||||||
""" if has geometry column load to map canvas """
|
""" if has geometry column load to map canvas """
|
||||||
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
|
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
|
||||||
self.setRenderFlag(False)
|
self.setRenderFlag(False)
|
||||||
newLayerId = None
|
vl = None
|
||||||
|
|
||||||
if table.geomType:
|
if table and table.geomType:
|
||||||
# limit the query result if required
|
# limit the query result if required
|
||||||
if limit and table.rowCount > 1000:
|
if limit and table.rowCount > 1000:
|
||||||
uniqueField = table.getValidQGisUniqueFields(True)
|
uniqueField = table.getValidQGisUniqueFields(True)
|
||||||
@ -112,17 +110,21 @@ class LayerPreview(QgsMapCanvas):
|
|||||||
vl = table.toMapLayer()
|
vl = table.toMapLayer()
|
||||||
|
|
||||||
if not vl.isValid():
|
if not vl.isValid():
|
||||||
self.setLayerSet([])
|
vl.deleteLater()
|
||||||
else:
|
vl = None
|
||||||
newLayerId = vl.id() if hasattr(vl, 'id') else vl.id()
|
|
||||||
|
# remove old layer (if any) and set new
|
||||||
|
if self.currentLayer:
|
||||||
|
QgsMapLayerRegistry.instance().removeMapLayers([self.currentLayer.id()])
|
||||||
|
|
||||||
|
if vl:
|
||||||
self.setLayerSet([QgsMapCanvasLayer(vl)])
|
self.setLayerSet([QgsMapCanvasLayer(vl)])
|
||||||
QgsMapLayerRegistry.instance().addMapLayers([vl], False)
|
QgsMapLayerRegistry.instance().addMapLayers([vl], False)
|
||||||
self.zoomToFullExtent()
|
self.zoomToFullExtent()
|
||||||
|
else:
|
||||||
|
self.setLayerSet([])
|
||||||
|
|
||||||
# remove old layer (if any) and set new
|
self.currentLayer = vl
|
||||||
if self.currentLayerId:
|
|
||||||
QgsMapLayerRegistry.instance().removeMapLayers([self.currentLayerId], False)
|
|
||||||
self.currentLayerId = newLayerId
|
|
||||||
|
|
||||||
self.setRenderFlag(True)
|
self.setRenderFlag(True)
|
||||||
QApplication.restoreOverrideCursor()
|
QApplication.restoreOverrideCursor()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user