Skip to content

Commit eaf90e6

Browse files
committed
Fix crash when showing form with definition for deleted widget
(Fix #9064)
1 parent 38b5f4e commit eaf90e6

File tree

1 file changed

+32
-25
lines changed

1 file changed

+32
-25
lines changed

src/gui/qgsattributeeditor.cpp

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1392,41 +1392,48 @@ QWidget* QgsAttributeEditor::createWidgetFromDef( const QgsAttributeEditorElemen
13921392
{
13931393
const QgsAttributeEditorField* fieldDef = dynamic_cast<const QgsAttributeEditorField*>( widgetDef );
13941394
int fldIdx = fieldDef->idx();
1395-
newWidget = createAttributeEditor( parent, 0, vl, fldIdx, feat.attributes().value( fldIdx, QVariant() ), context );
1396-
1397-
if ( newWidget )
1395+
if ( fldIdx < vl->pendingFields().count() && fldIdx >= 0 )
13981396
{
1399-
if ( vl->editType( fldIdx ) != QgsVectorLayer::Immutable )
1397+
newWidget = createAttributeEditor( parent, 0, vl, fldIdx, feat.attributes().value( fldIdx, QVariant() ), context );
1398+
1399+
if ( newWidget )
14001400
{
1401-
if ( newWidget->isEnabled() && vl->isEditable() && vl->fieldEditable( fldIdx ) )
1401+
if ( vl->editType( fldIdx ) != QgsVectorLayer::Immutable )
14021402
{
1403-
newWidget->setEnabled( true );
1404-
}
1405-
else if ( vl->editType( fldIdx ) == QgsVectorLayer::Photo )
1406-
{
1407-
foreach ( QWidget *w, newWidget->findChildren<QWidget *>() )
1403+
if ( newWidget->isEnabled() && vl->isEditable() && vl->fieldEditable( fldIdx ) )
14081404
{
1409-
w->setEnabled( qobject_cast<QLabel *>( w ) ? true : false );
1405+
newWidget->setEnabled( true );
14101406
}
1411-
}
1412-
else if ( vl->editType( fldIdx ) == QgsVectorLayer::WebView )
1413-
{
1414-
foreach ( QWidget *w, newWidget->findChildren<QWidget *>() )
1407+
else if ( vl->editType( fldIdx ) == QgsVectorLayer::Photo )
14151408
{
1416-
if ( qobject_cast<QWebView *>( w ) )
1417-
w->setEnabled( true );
1418-
else if ( qobject_cast<QPushButton *>( w ) && w->objectName() == "openUrl" )
1419-
w->setEnabled( true );
1420-
else
1421-
w->setEnabled( false );
1409+
foreach ( QWidget *w, newWidget->findChildren<QWidget *>() )
1410+
{
1411+
w->setEnabled( qobject_cast<QLabel *>( w ) ? true : false );
1412+
}
1413+
}
1414+
else if ( vl->editType( fldIdx ) == QgsVectorLayer::WebView )
1415+
{
1416+
foreach ( QWidget *w, newWidget->findChildren<QWidget *>() )
1417+
{
1418+
if ( qobject_cast<QWebView *>( w ) )
1419+
w->setEnabled( true );
1420+
else if ( qobject_cast<QPushButton *>( w ) && w->objectName() == "openUrl" )
1421+
w->setEnabled( true );
1422+
else
1423+
w->setEnabled( false );
1424+
}
1425+
}
1426+
else
1427+
{
1428+
newWidget->setEnabled( false );
14221429
}
1423-
}
1424-
else
1425-
{
1426-
newWidget->setEnabled( false );
14271430
}
14281431
}
14291432
}
1433+
else
1434+
{
1435+
newWidget = new QLabel( tr( "<i>Error: Field does not exist in datasource</i>" ), parent );
1436+
}
14301437
labelOnTop = vl->labelOnTop( fieldDef->idx() );
14311438
labelText = vl->attributeDisplayName( fieldDef->idx() );
14321439
break;

0 commit comments

Comments
 (0)