Skip to content

Commit 1c63522

Browse files
mbernasocchim-kuhn
authored andcommitted
Added QgsFields::names method to get a list of all the names of fields
1 parent 5dce8ed commit 1c63522

File tree

5 files changed

+43
-1
lines changed

5 files changed

+43
-1
lines changed

python/core/qgsfields.sip

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,13 @@ Return number of items
115115
:rtype: int
116116
%End
117117

118+
QStringList names() const;
119+
%Docstring
120+
Returns a list with field names
121+
.. versionadded:: 3.0
122+
:rtype: list of str
123+
%End
124+
118125
bool exists( int i ) const;
119126
%Docstring
120127
Return if a field index is valid

src/core/qgsfields.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,16 @@ int QgsFields::size() const
122122
return d->fields.count();
123123
}
124124

125+
QStringList QgsFields::names() const
126+
{
127+
QStringList lst;
128+
for ( int i = 0; i < d->fields.count(); ++i )
129+
{
130+
lst.append( d->fields[i].field.name() );
131+
}
132+
return lst;
133+
}
134+
125135
bool QgsFields::exists( int i ) const
126136
{
127137
return i >= 0 && i < d->fields.count();

src/core/qgsfields.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,12 @@ class CORE_EXPORT QgsFields
138138
//! Return number of items
139139
int size() const;
140140

141+
/**
142+
* Returns a list with field names
143+
* \since QGIS 3.0
144+
*/
145+
QStringList names() const;
146+
141147
/**
142148
* Return if a field index is valid
143149
* \param i Index of the field which needs to be checked

tests/src/python/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ ADD_PYTHON_TEST(PyQgsFillSymbolLayers test_qgsfillsymbollayers.py)
6060
ADD_PYTHON_TEST(PyQgsProject test_qgsproject.py)
6161
ADD_PYTHON_TEST(PyQgsFeatureIterator test_qgsfeatureiterator.py)
6262
ADD_PYTHON_TEST(PyQgsFeedback test_qgsfeedback.py)
63-
ADD_PYTHON_TEST(PyQgsField test_qgsfield.py)
63+
ADD_PYTHON_TEST(PyQgsFields test_qgsfields.py)
6464
ADD_PYTHON_TEST(PyQgsFieldModel test_qgsfieldmodel.py)
6565
ADD_PYTHON_TEST(PyQgsFilterLineEdit test_qgsfilterlineedit.py)
6666
ADD_PYTHON_TEST(PyQgsFloatingWidget test_qgsfloatingwidget.py)

tests/src/python/test_qgsfield.py renamed to tests/src/python/test_qgsfields.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,25 @@ def test_exceptions(self):
9191
with self.assertRaises(KeyError):
9292
fields.iconForField(111)
9393

94+
def test_names(self):
95+
ml = QgsVectorLayer(
96+
"Point?crs=epsg:4236" +
97+
"&field=id:integer" +
98+
"&field=value:double" +
99+
"&field=crazy:double",
100+
"test_data",
101+
"memory")
102+
103+
assert ml.isValid()
104+
fields = ml.fields()
105+
106+
expected_fields = ['id', 'value', 'crazy']
107+
108+
self.assertEquals(fields.names(), expected_fields)
109+
fields.remove(1)
110+
expected_fields = ['id', 'crazy']
111+
self.assertEquals(fields.names(), expected_fields)
112+
94113

95114
if __name__ == '__main__':
96115
unittest.main()

0 commit comments

Comments
 (0)