[GIS] How to get QgsFeatureId with row and column in qtablewidget.(PyQGIS)

pyqgis

In a QGIS python plugin. I like to change value selected cell in qtablewidget to the typed value. Something like screenshot below.

enter image description here

But in changeattributevalue function. While column(second value) and string(third value) is really easy to get. I really can't find a way to get "QgsFeatureId"(first value) with row and columns of qtablewidget.

If I do something like below. It will always change wrong row.

layer.changeAttributeValue(long(table.selectedIndexes()[0].row()), table.selectedIndexes()[0].column(), changestring.text())

I tried to use QgsFeatureRequest() with unique column field, but I really don't know how to use this function with variables and scanning whole table seems ununnecessary.

(ex: request = QgsFeatureRequest().setFilterExpression( u' header[table.selectedIndexes()[0].column()] = table_data[0][table.selectedIndexes()[0].row()]' ))

Is there any way to get QgsFeatureId based on row number?

Best Answer

You need to save the feature ID when constructing QTableWidgetItem objects.

Qt gives you a handy method to store any data you need into a QTableWidgetItem (besides the displayed value).

item = QTableWidgetItem( someValue )
item.setData( Qt.UserRole, feature.id() )
self.mytable.setItem( row, column, item )

Once you have the selected item, you can retrieve such data in this way:

fid = item.data( Qt.UserRole )
Related Question