@@ -161,12 +161,12 @@ void QgsIdentifyResults::addFeature( QgsMapLayer *layer, int fid,
161
161
layItem->setData ( 0 , Qt::UserRole, QVariant::fromValue ( qobject_cast<QObject *>( layer ) ) );
162
162
lstResults->addTopLevelItem ( layItem );
163
163
164
- QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( layer );
165
164
if ( vlayer )
166
165
{
167
166
connect ( vlayer, SIGNAL ( layerDeleted () ), this , SLOT ( layerDestroyed () ) );
168
167
connect ( vlayer, SIGNAL ( layerCrsChanged () ), this , SLOT ( layerDestroyed () ) );
169
168
connect ( vlayer, SIGNAL ( featureDeleted ( int ) ), this , SLOT ( featureDeleted ( int ) ) );
169
+ connect ( vlayer, SIGNAL ( attributeValueChanged ( int , int , const QVariant & ) ), this , SLOT ( attributeValueChanged ( int , int , const QVariant & ) ) );
170
170
connect ( vlayer, SIGNAL ( editingStarted () ), this , SLOT ( editingToggled () ) );
171
171
connect ( vlayer, SIGNAL ( editingStopped () ), this , SLOT ( editingToggled () ) );
172
172
}
@@ -182,7 +182,12 @@ void QgsIdentifyResults::addFeature( QgsMapLayer *layer, int fid,
182
182
183
183
for ( QMap<QString, QString>::const_iterator it = attributes.begin (); it != attributes.end (); it++ )
184
184
{
185
- featItem->addChild ( new QTreeWidgetItem ( QStringList () << it.key () << it.value () ) );
185
+ QTreeWidgetItem *attrItem = new QTreeWidgetItem ( QStringList () << it.key () << it.value () );
186
+ if ( vlayer )
187
+ {
188
+ attrItem->setData ( 0 , Qt::UserRole, vlayer->fieldNameIndex ( it.key () ) );
189
+ }
190
+ featItem->addChild ( attrItem );
186
191
}
187
192
188
193
if ( derivedAttributes.size () >= 0 )
@@ -644,6 +649,7 @@ void QgsIdentifyResults::disconnectLayer( QObject *layer )
644
649
{
645
650
disconnect ( vlayer, SIGNAL ( layerDeleted () ), this , SLOT ( layerDestroyed () ) );
646
651
disconnect ( vlayer, SIGNAL ( featureDeleted ( int ) ), this , SLOT ( featureDeleted ( int ) ) );
652
+ disconnect ( vlayer, SIGNAL ( attributeValueChanged ( int , int , const QVariant & ) ), this , SLOT ( attributeValueChanged ( int , int , const QVariant & ) ) );
647
653
disconnect ( vlayer, SIGNAL ( editingStarted () ), this , SLOT ( editingToggled () ) );
648
654
disconnect ( vlayer, SIGNAL ( editingStopped () ), this , SLOT ( editingToggled () ) );
649
655
}
@@ -683,6 +689,35 @@ void QgsIdentifyResults::featureDeleted( int fid )
683
689
}
684
690
}
685
691
692
+ void QgsIdentifyResults::attributeValueChanged ( int fid, int idx, const QVariant &val )
693
+ {
694
+ QTreeWidgetItem *layItem = layerItem ( sender () );
695
+
696
+ if ( !layItem )
697
+ return ;
698
+
699
+ for ( int i = 0 ; i < layItem->childCount (); i++ )
700
+ {
701
+ QTreeWidgetItem *featItem = layItem->child ( i );
702
+
703
+ if ( featItem && featItem->data ( 0 , Qt::UserRole ).toInt () == fid )
704
+ {
705
+ for ( int j = 0 ; j < featItem->childCount (); j++ )
706
+ {
707
+ QTreeWidgetItem *item = featItem->child ( j );
708
+ if ( item->childCount () > 0 )
709
+ continue ;
710
+
711
+ if ( item->data ( 0 , Qt::UserRole ).toInt () == idx )
712
+ {
713
+ item->setData ( 1 , Qt::DisplayRole, val );
714
+ return ;
715
+ }
716
+ }
717
+ }
718
+ }
719
+ }
720
+
686
721
void QgsIdentifyResults::highlightFeature ( QTreeWidgetItem *item )
687
722
{
688
723
QgsVectorLayer *layer = vectorLayer ( item );
0 commit comments