diff --git a/python/core/qgsfield.sip b/python/core/qgsfield.sip index 81409257bd9..9a53f0e3634 100644 --- a/python/core/qgsfield.sip +++ b/python/core/qgsfield.sip @@ -73,6 +73,14 @@ class QgsField */ QString comment() const; + /** + * Returns if this field is numeric. Any integer or floating point type + * will return true for this. + * + * @note added in QGIS 2.18 + */ + bool isNumeric() const; + /** * Set the field name. * @param name Name of the field diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 592c54196c3..5a641d53ac2 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -455,6 +455,7 @@ SET(QGIS_CORE_MOC_HDRS qgsdbfilterproxymodel.h qgseditformconfig.h qgsfeedback.h + qgsfield.h qgsgeometryvalidator.h qgsgml.h qgsgmlschema.h @@ -644,7 +645,6 @@ SET(QGIS_CORE_HDRS qgsfeatureiterator.h qgsfeaturerequest.h qgsfeaturestore.h - qgsfield.h qgsfield_p.h qgsfontutils.h qgsgeometrycache.h diff --git a/src/core/qgsfield.cpp b/src/core/qgsfield.cpp index 957faeee5ea..368880a4725 100644 --- a/src/core/qgsfield.cpp +++ b/src/core/qgsfield.cpp @@ -111,6 +111,11 @@ QString QgsField::comment() const return d->comment; } +bool QgsField::isNumeric() const +{ + return d->type == QVariant::Double || d->type == QVariant::Int || d->type == QVariant::UInt || d->type == QVariant::LongLong || d->type == QVariant::ULongLong; +} + /*************************************************************************** * This class is considered CRITICAL and any change MUST be accompanied with * full unit tests in testqgsfield.cpp. diff --git a/src/core/qgsfield.h b/src/core/qgsfield.h index 60f1f1154c3..618901076b0 100644 --- a/src/core/qgsfield.h +++ b/src/core/qgsfield.h @@ -43,6 +43,14 @@ class QgsFieldsPrivate; class CORE_EXPORT QgsField { + Q_GADGET + + Q_PROPERTY( bool isNumeric READ isNumeric ) + Q_PROPERTY( int length READ length ) + Q_PROPERTY( int precision READ precision ) + Q_PROPERTY( QString comment READ comment ) + Q_PROPERTY( QString name READ name ) + public: /** Constructor. Constructs a new QgsField object. * @param name Field name @@ -107,6 +115,14 @@ class CORE_EXPORT QgsField */ QString comment() const; + /** + * Returns if this field is numeric. Any integer or floating point type + * will return true for this. + * + * @note added in QGIS 2.18 + */ + bool isNumeric() const; + /** * Set the field name. * @param name Name of the field diff --git a/tests/src/core/testqgsfield.cpp b/tests/src/core/testqgsfield.cpp index 1a7b53f7997..9f4919d60d0 100644 --- a/tests/src/core/testqgsfield.cpp +++ b/tests/src/core/testqgsfield.cpp @@ -34,6 +34,7 @@ class TestQgsField: public QObject void copy();// test cpy destruction (double delete) void assignment(); void gettersSetters(); //test getters and setters + void isNumeric(); //test isNumeric void equality(); //test equality operators void asVariant(); //test conversion to and from a QVariant void displayString(); @@ -117,6 +118,29 @@ void TestQgsField::gettersSetters() QCOMPARE( field.comment(), QString( "comment" ) ); } +void TestQgsField::isNumeric() +{ + QgsField field; + field.setType( QVariant::Int ); + QVERIFY( field.isNumeric() ); + field.setType( QVariant::UInt ); + QVERIFY( field.isNumeric() ); + field.setType( QVariant::Double ); + QVERIFY( field.isNumeric() ); + field.setType( QVariant::LongLong ); + QVERIFY( field.isNumeric() ); + field.setType( QVariant::ULongLong ); + QVERIFY( field.isNumeric() ); + field.setType( QVariant::String ); + QVERIFY( !field.isNumeric() ); + field.setType( QVariant::DateTime ); + QVERIFY( !field.isNumeric() ); + field.setType( QVariant::Bool ); + QVERIFY( !field.isNumeric() ); + field.setType( QVariant::Invalid ); + QVERIFY( !field.isNumeric() ); +} + void TestQgsField::equality() { QgsField field1;