void QgsPaintEffectPropertiesWidget::effectTypeChanged() { QgsPaintEffect* effect = mEffect; if ( !effect ) return; QString newEffectType = mEffectTypeCombo->currentData().toString(); if ( effect->type() == newEffectType ) return; // get creation function for new effect from registry QgsPaintEffectRegistry* registry = QgsApplication::paintEffectRegistry(); QgsPaintEffectAbstractMetadata* am = registry->effectMetadata( newEffectType ); if ( !am ) // check whether the metadata is assigned return; // change effect to a new (with different type) // base new effect on existing effect's properties QgsPaintEffect* newEffect = am->createPaintEffect( effect->properties() ); if ( !newEffect ) return; updateEffectWidget( newEffect ); emit changeEffect( newEffect ); mEffect = newEffect; }