@@ -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