diff --git a/src/app/qgsfieldsproperties.cpp b/src/app/qgsfieldsproperties.cpp index 57348d51bfa1..5a15c6c3862f 100644 --- a/src/app/qgsfieldsproperties.cpp +++ b/src/app/qgsfieldsproperties.cpp @@ -165,6 +165,10 @@ QTreeWidgetItem *QgsFieldsProperties::loadAttributeEditorTreeItem( QgsAttributeE newWidget = mDesignerTree->addItem( parent, DesignerTreeItemData( DesignerTreeItemData::Container, widgetDef->name() ) ); const QgsAttributeEditorContainer* container = dynamic_cast( widgetDef ); + if ( !container ) + { + break; + } Q_FOREACH ( QgsAttributeEditorElement* wdg, container->children() ) { diff --git a/src/core/dxf/qgsdxfexport.cpp b/src/core/dxf/qgsdxfexport.cpp index 6227f878a3c8..b7055db21137 100644 --- a/src/core/dxf/qgsdxfexport.cpp +++ b/src/core/dxf/qgsdxfexport.cpp @@ -3224,7 +3224,7 @@ void QgsDxfExport::writePoint( const QgsPoint& pt, const QString& layer, QColor { //write symbol directly here const QgsMarkerSymbolLayerV2* msl = dynamic_cast< const QgsMarkerSymbolLayerV2* >( symbolLayer ); - if ( symbolLayer && symbol ) + if ( msl && symbol ) { QgsRenderContext ct; QgsSymbolV2RenderContext ctx( ct, QgsSymbolV2::MapUnit, symbol->alpha(), false, symbol->renderHints(), f ); diff --git a/src/core/dxf/qgsdxfpallabeling.cpp b/src/core/dxf/qgsdxfpallabeling.cpp index 8f58a7fe78cb..fdfcef56ae9a 100644 --- a/src/core/dxf/qgsdxfpallabeling.cpp +++ b/src/core/dxf/qgsdxfpallabeling.cpp @@ -75,6 +75,8 @@ void QgsDxfPalLabeling::drawLabel( pal::LabelPosition* label, QgsRenderContext& if ( mDxfExport ) { QgsPalGeometry *g = dynamic_cast< QgsPalGeometry* >( label->getFeaturePart()->getUserGeometry() ); + if ( !g ) + return; //label text QString text = g->text(); diff --git a/src/core/layertree/qgslayertreemodel.cpp b/src/core/layertree/qgslayertreemodel.cpp index a8da647d5e19..708b762042e9 100644 --- a/src/core/layertree/qgslayertreemodel.cpp +++ b/src/core/layertree/qgslayertreemodel.cpp @@ -194,15 +194,13 @@ QVariant QgsLayerTreeModel::data( const QModelIndex &index, int role ) const QgsRasterLayer* rlayer = qobject_cast( layer ); return QIcon( rlayer->previewAsPixmap( QSize( 32, 32 ) ) ); } + else + { + return QgsLayerItem::iconRaster(); + } } QgsVectorLayer *vlayer = dynamic_cast( layer ); - - if ( layer->type() == QgsMapLayer::RasterLayer ) - { - return QgsLayerItem::iconRaster(); - } - QIcon icon; // if there's just on legend entry that should be embedded in layer - do that! @@ -210,7 +208,7 @@ QVariant QgsLayerTreeModel::data( const QModelIndex &index, int role ) const { icon = legendIconEmbeddedInParent( nodeLayer ); } - else if ( layer->type() == QgsMapLayer::VectorLayer ) + else if ( vlayer && layer->type() == QgsMapLayer::VectorLayer ) { if ( vlayer->geometryType() == QGis::Point ) icon = QgsLayerItem::iconPoint(); diff --git a/src/core/qgsdataitem.cpp b/src/core/qgsdataitem.cpp index c660f8d41cd8..47a793cb34d5 100644 --- a/src/core/qgsdataitem.cpp +++ b/src/core/qgsdataitem.cpp @@ -659,6 +659,9 @@ bool QgsLayerItem::equal( const QgsDataItem *other ) } //const QgsLayerItem *o = qobject_cast ( other ); const QgsLayerItem *o = dynamic_cast( other ); + if ( !o ) + return false; + return ( mPath == o->mPath && mName == o->mName && mUri == o->mUri && mProviderKey == o->mProviderKey ); } diff --git a/src/core/qgspointlocator.cpp b/src/core/qgspointlocator.cpp index 94f58a943f45..6bb9d97d7cbc 100644 --- a/src/core/qgspointlocator.cpp +++ b/src/core/qgspointlocator.cpp @@ -529,6 +529,9 @@ class QgsPointLocator_DumpTree : public SpatialIndex::IQueryStrategy void getNextEntry( const IEntry& entry, id_type& nextEntry, bool& hasNext ) override { const INode* n = dynamic_cast( &entry ); + if ( !n ) + return; + qDebug( "NODE: %ld", n->getIdentifier() ); if ( n->getLevel() > 0 ) { diff --git a/src/core/symbology-ng/qgscptcityarchive.cpp b/src/core/symbology-ng/qgscptcityarchive.cpp index 8883b92e3e30..b50cd8e55864 100644 --- a/src/core/symbology-ng/qgscptcityarchive.cpp +++ b/src/core/symbology-ng/qgscptcityarchive.cpp @@ -1531,15 +1531,18 @@ QModelIndex QgsCptCityBrowserModel::findPath( QString path ) if ( item->type() == QgsCptCityDataItem::Selection ) { const QgsCptCitySelectionItem* selItem = dynamic_cast( item ); - foreach ( QString childPath, selItem->selectionsList() ) + if ( selItem ) { - if ( childPath.endsWith( "/" ) ) - childPath.chop( 1 ); - // QgsDebugMsg( "childPath= " + childPath ); - if ( path.startsWith( childPath ) ) + foreach ( QString childPath, selItem->selectionsList() ) { - foundParent = true; - break; + if ( childPath.endsWith( "/" ) ) + childPath.chop( 1 ); + // QgsDebugMsg( "childPath= " + childPath ); + if ( path.startsWith( childPath ) ) + { + foundParent = true; + break; + } } } } diff --git a/src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp b/src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp index 829faf95ca4b..71f0169e2fa4 100644 --- a/src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp +++ b/src/core/symbology-ng/qgsgraduatedsymbolrendererv2.cpp @@ -1575,12 +1575,14 @@ QgsGraduatedSymbolRendererV2* QgsGraduatedSymbolRendererV2::convertFromRenderer( if ( renderer->type() == "pointDisplacement" ) { const QgsPointDisplacementRenderer* pointDisplacementRenderer = dynamic_cast( renderer ); - return convertFromRenderer( pointDisplacementRenderer->embeddedRenderer() ); + if ( pointDisplacementRenderer ) + return convertFromRenderer( pointDisplacementRenderer->embeddedRenderer() ); } if ( renderer->type() == "invertedPolygonRenderer" ) { const QgsInvertedPolygonRenderer* invertedPolygonRenderer = dynamic_cast( renderer ); - return convertFromRenderer( invertedPolygonRenderer->embeddedRenderer() ); + if ( invertedPolygonRenderer ) + return convertFromRenderer( invertedPolygonRenderer->embeddedRenderer() ); } // If not one of the specifically handled renderers, then just grab the symbol from the renderer diff --git a/src/core/symbology-ng/qgsrulebasedrendererv2.cpp b/src/core/symbology-ng/qgsrulebasedrendererv2.cpp index ef506890a0da..f12964f30fe3 100644 --- a/src/core/symbology-ng/qgsrulebasedrendererv2.cpp +++ b/src/core/symbology-ng/qgsrulebasedrendererv2.cpp @@ -1081,6 +1081,9 @@ QgsRuleBasedRendererV2* QgsRuleBasedRendererV2::convertFromRenderer( const QgsFe if ( renderer->type() == "singleSymbol" ) { const QgsSingleSymbolRendererV2* singleSymbolRenderer = dynamic_cast( renderer ); + if ( !singleSymbolRenderer ) + return 0; + QgsSymbolV2* origSymbol = singleSymbolRenderer->symbol()->clone(); convertToDataDefinedSymbology( origSymbol, singleSymbolRenderer->sizeScaleField(), singleSymbolRenderer->rotationField() ); return new QgsRuleBasedRendererV2( origSymbol ); @@ -1141,6 +1144,8 @@ QgsRuleBasedRendererV2* QgsRuleBasedRendererV2::convertFromRenderer( const QgsFe { const QgsGraduatedSymbolRendererV2* graduatedRenderer = dynamic_cast( renderer ); + if ( !graduatedRenderer ) + return 0; QgsRuleBasedRendererV2::Rule* rootrule = new QgsRuleBasedRendererV2::Rule( NULL ); @@ -1181,12 +1186,14 @@ QgsRuleBasedRendererV2* QgsRuleBasedRendererV2::convertFromRenderer( const QgsFe if ( renderer->type() == "pointDisplacement" ) { const QgsPointDisplacementRenderer* pointDisplacementRenderer = dynamic_cast( renderer ); - return convertFromRenderer( pointDisplacementRenderer->embeddedRenderer() ); + if ( pointDisplacementRenderer ) + return convertFromRenderer( pointDisplacementRenderer->embeddedRenderer() ); } if ( renderer->type() == "invertedPolygonRenderer" ) { const QgsInvertedPolygonRenderer* invertedPolygonRenderer = dynamic_cast( renderer ); - return convertFromRenderer( invertedPolygonRenderer->embeddedRenderer() ); + if ( invertedPolygonRenderer ) + return convertFromRenderer( invertedPolygonRenderer->embeddedRenderer() ); } return NULL; diff --git a/src/core/symbology-ng/qgssinglesymbolrendererv2.cpp b/src/core/symbology-ng/qgssinglesymbolrendererv2.cpp index e5f497d0ea83..9381b9e1a71b 100644 --- a/src/core/symbology-ng/qgssinglesymbolrendererv2.cpp +++ b/src/core/symbology-ng/qgssinglesymbolrendererv2.cpp @@ -392,13 +392,14 @@ QgsSingleSymbolRendererV2* QgsSingleSymbolRendererV2::convertFromRenderer( const if ( renderer->type() == "pointDisplacement" ) { const QgsPointDisplacementRenderer* pointDisplacementRenderer = dynamic_cast( renderer ); - return convertFromRenderer( pointDisplacementRenderer->embeddedRenderer() ); + if ( pointDisplacementRenderer ) + return convertFromRenderer( pointDisplacementRenderer->embeddedRenderer() ); } if ( renderer->type() == "invertedPolygonRenderer" ) { const QgsInvertedPolygonRenderer* invertedPolygonRenderer = dynamic_cast( renderer ); - return convertFromRenderer( invertedPolygonRenderer->embeddedRenderer() ); - + if ( invertedPolygonRenderer ) + return convertFromRenderer( invertedPolygonRenderer->embeddedRenderer() ); } QgsSymbolV2List symbols = const_cast( renderer )->symbols(); diff --git a/src/gui/qgsattributeform.cpp b/src/gui/qgsattributeform.cpp index 66c2d791de18..7ee1c3cc41a0 100644 --- a/src/gui/qgsattributeform.cpp +++ b/src/gui/qgsattributeform.cpp @@ -386,6 +386,9 @@ void QgsAttributeForm::init() if ( widgDef->type() == QgsAttributeEditorElement::AeTypeContainer ) { QgsAttributeEditorContainer* containerDef = dynamic_cast( widgDef ); + if ( !containerDef ) + continue; + containerDef->setIsGroupBox( false ); // Toplevel widgets are tabs not groupboxes QString dummy1; bool dummy2; @@ -565,6 +568,9 @@ QWidget* QgsAttributeForm::createWidgetFromDef( const QgsAttributeEditorElement case QgsAttributeEditorElement::AeTypeField: { const QgsAttributeEditorField* fieldDef = dynamic_cast( widgetDef ); + if ( !fieldDef ) + break; + int fldIdx = fieldDef->idx(); if ( fldIdx < vl->pendingFields().count() && fldIdx >= 0 ) { @@ -600,8 +606,10 @@ QWidget* QgsAttributeForm::createWidgetFromDef( const QgsAttributeEditorElement case QgsAttributeEditorElement::AeTypeContainer: { const QgsAttributeEditorContainer* container = dynamic_cast( widgetDef ); - QWidget* myContainer; + if ( !container ) + break; + QWidget* myContainer; if ( container->isGroupBox() ) { QGroupBox* groupBox = new QGroupBox( parent ); @@ -760,7 +768,7 @@ bool QgsAttributeForm::eventFilter( QObject* object, QEvent* e ) if ( e->type() == QEvent::KeyPress ) { QKeyEvent* keyEvent = dynamic_cast( e ); - if ( keyEvent->key() == Qt::Key_Escape ) + if ( keyEvent && keyEvent->key() == Qt::Key_Escape ) { // Re-emit to this form so it will be forwarded to parent event( e ); diff --git a/src/gui/qgsexpressionbuilderwidget.cpp b/src/gui/qgsexpressionbuilderwidget.cpp index 65ea8abb1a37..f7182f577da0 100644 --- a/src/gui/qgsexpressionbuilderwidget.cpp +++ b/src/gui/qgsexpressionbuilderwidget.cpp @@ -565,7 +565,7 @@ void QgsExpressionBuilderWidget::loadSampleValues() QgsExpressionItem* item = dynamic_cast( mModel->itemFromIndex( idx ) ); // TODO We should really return a error the user of the widget that // the there is no layer set. - if ( !mLayer ) + if ( !mLayer || !item ) return; mValueGroupBox->show(); @@ -580,7 +580,7 @@ void QgsExpressionBuilderWidget::loadAllValues() QgsExpressionItem* item = dynamic_cast( mModel->itemFromIndex( idx ) ); // TODO We should really return a error the user of the widget that // the there is no layer set. - if ( !mLayer ) + if ( !mLayer || !item ) return; mValueGroupBox->show(); diff --git a/src/gui/qgsfieldexpressionwidget.cpp b/src/gui/qgsfieldexpressionwidget.cpp index 8057d9a9af26..cba0add6bdbd 100644 --- a/src/gui/qgsfieldexpressionwidget.cpp +++ b/src/gui/qgsfieldexpressionwidget.cpp @@ -71,6 +71,9 @@ void QgsFieldExpressionWidget::setFilters( QgsFieldProxyModel::Filters filters ) void QgsFieldExpressionWidget::setLeftHandButtonStyle( bool isLeft ) { QHBoxLayout* layout = dynamic_cast( this->layout() ); + if ( !layout ) + return; + if ( isLeft ) { QLayoutItem* item = layout->takeAt( 1 ); diff --git a/src/gui/symbology-ng/qgsrendererv2widget.cpp b/src/gui/symbology-ng/qgsrendererv2widget.cpp index cefc3258ad4c..f114422faba5 100644 --- a/src/gui/symbology-ng/qgsrendererv2widget.cpp +++ b/src/gui/symbology-ng/qgsrendererv2widget.cpp @@ -129,13 +129,16 @@ void QgsRendererV2Widget::changeSymbolWidth() } bool ok; - double width = QInputDialog::getDouble( this, tr( "Width" ), tr( "Change symbol width" ), dynamic_cast( symbolList.at( 0 ) )->width(), 0.0, 999999, 1, &ok ); + QgsLineSymbolV2* line = dynamic_cast( symbolList.at( 0 ) ) ; + double width = QInputDialog::getDouble( this, tr( "Width" ), tr( "Change symbol width" ), line ? line->width() : 0.0 , 0.0, 999999, 1, &ok ); if ( ok ) { QList::iterator symbolIt = symbolList.begin(); for ( ; symbolIt != symbolList.end(); ++symbolIt ) { - dynamic_cast( *symbolIt )->setWidth( width ); + line = dynamic_cast( *symbolIt ); + if ( line ) + line->setWidth( width ); } refreshSymbolView(); } @@ -150,13 +153,17 @@ void QgsRendererV2Widget::changeSymbolSize() } bool ok; - double size = QInputDialog::getDouble( this, tr( "Size" ), tr( "Change symbol size" ), dynamic_cast( symbolList.at( 0 ) )->size(), 0.0, 999999, 1, &ok ); + QgsMarkerSymbolV2* marker = dynamic_cast( symbolList.at( 0 ) ); + + double size = QInputDialog::getDouble( this, tr( "Size" ), tr( "Change symbol size" ), marker ? marker->size() : 0.0 , 0.0, 999999, 1, &ok ); if ( ok ) { QList::iterator symbolIt = symbolList.begin(); for ( ; symbolIt != symbolList.end(); ++symbolIt ) { - dynamic_cast( *symbolIt )->setSize( size ); + marker = dynamic_cast( *symbolIt ); + if ( marker ) + marker->setSize( size ); } refreshSymbolView(); } diff --git a/src/plugins/georeferencer/qgsgeoreftransform.cpp b/src/plugins/georeferencer/qgsgeoreftransform.cpp index 6ed6e9cadc9b..34e76083f842 100644 --- a/src/plugins/georeferencer/qgsgeoreftransform.cpp +++ b/src/plugins/georeferencer/qgsgeoreftransform.cpp @@ -303,12 +303,14 @@ bool QgsGeorefTransform::getOriginScaleRotation( QgsPoint &origin, double &scale if ( mTransformParametrisation == Linear ) { rotation = 0.0; - return dynamic_cast( mGeorefTransformImplementation )->getOriginScale( origin, scaleX, scaleY ); + QgsLinearGeorefTransform* transform = dynamic_cast( mGeorefTransformImplementation ); + return transform && transform->getOriginScale( origin, scaleX, scaleY ); } else if ( mTransformParametrisation == Helmert ) { double scale; - if ( ! dynamic_cast( mGeorefTransformImplementation )->getOriginScaleRotation( origin, scale, rotation ) ) + QgsHelmertGeorefTransform* transform = dynamic_cast( mGeorefTransformImplementation ); + if ( !transform || ! transform->getOriginScaleRotation( origin, scale, rotation ) ) { return false; } diff --git a/src/providers/ows/qgsowsdataitems.cpp b/src/providers/ows/qgsowsdataitems.cpp index 8dfb3e82eaad..67eedad885af 100644 --- a/src/providers/ows/qgsowsdataitems.cpp +++ b/src/providers/ows/qgsowsdataitems.cpp @@ -126,7 +126,7 @@ bool QgsOWSConnectionItem::equal( const QgsDataItem *other ) return false; } const QgsOWSConnectionItem *o = dynamic_cast( other ); - return ( mPath == o->mPath && mName == o->mName ); + return ( o && mPath == o->mPath && mName == o->mName ); } QList QgsOWSConnectionItem::actions() diff --git a/tests/src/core/testqgslegendrenderer.cpp b/tests/src/core/testqgslegendrenderer.cpp index f06199a9bee1..9c8173e1495a 100644 --- a/tests/src/core/testqgslegendrenderer.cpp +++ b/tests/src/core/testqgslegendrenderer.cpp @@ -215,7 +215,9 @@ void TestQgsLegendRenderer::testBigMarker() QgsMarkerSymbolV2* sym = new QgsMarkerSymbolV2(); sym->setColor( Qt::red ); sym->setSize( sym->size() * 6 ); - dynamic_cast( mVL3->rendererV2() )->updateCategorySymbol( 0, sym ); + QgsCategorizedSymbolRendererV2* catRenderer = dynamic_cast( mVL3->rendererV2() ); + QVERIFY( catRenderer ); + catRenderer->updateCategorySymbol( 0, sym ); //dynamic_cast( mVL3->rendererV2() )->updateCategoryLabel( 2, "This is a long symbol label" ); @@ -231,7 +233,9 @@ void TestQgsLegendRenderer::testLongSymbolText() { QString testName = "legend_long_symbol_text"; - dynamic_cast( mVL3->rendererV2() )->updateCategoryLabel( 1, "This is\nthree lines\nlong label" ); + QgsCategorizedSymbolRendererV2* catRenderer = dynamic_cast( mVL3->rendererV2() ); + QVERIFY( catRenderer ); + catRenderer->updateCategoryLabel( 1, "This is\nthree lines\nlong label" ); QgsLayerTreeModel legendModel( mRoot ); diff --git a/tests/src/core/testqgsmaplayerstylemanager.cpp b/tests/src/core/testqgsmaplayerstylemanager.cpp index c73c661c74a6..5038d917e690 100644 --- a/tests/src/core/testqgsmaplayerstylemanager.cpp +++ b/tests/src/core/testqgsmaplayerstylemanager.cpp @@ -104,6 +104,7 @@ void TestQgsMapLayerStyleManager::testStyle() void TestQgsMapLayerStyleManager::testReadWrite() { QgsSingleSymbolRendererV2* r0 = dynamic_cast( mVL->rendererV2() ); + QVERIFY( r0 ); r0->symbol()->setColor( Qt::red ); // create and populate the manager with one more style @@ -139,17 +140,24 @@ void TestQgsMapLayerStyleManager::testReadWrite() sm1.setCurrentStyle( QString() ); QgsSingleSymbolRendererV2* r2 = dynamic_cast( mVL->rendererV2() ); + QVERIFY( r2 ); QCOMPARE( r2->symbol()->color(), QColor( Qt::red ) ); } static void _setVLColor( QgsVectorLayer* vl, const QColor& c ) { - dynamic_cast( vl->rendererV2() )->symbol()->setColor( c ); + QgsSingleSymbolRendererV2* renderer = dynamic_cast( vl->rendererV2() ); + if ( renderer ) + renderer->symbol()->setColor( c ); } static QColor _getVLColor( QgsVectorLayer* vl ) { - return dynamic_cast( vl->rendererV2() )->symbol()->color(); + QgsSingleSymbolRendererV2* renderer = dynamic_cast( vl->rendererV2() ); + if ( renderer ) + return renderer->symbol()->color(); + else + return QColor(); } void TestQgsMapLayerStyleManager::testSwitchingStyles()