QGIS API Documentation 4.0.0-Norrköping (1ddcee3d0e4)
Loading...
Searching...
No Matches
qgsfield.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsfield.h - Describes a field in a layer or table
3 --------------------------------------
4 Date : 01-Jan-2004
5 Copyright : (C) 2004 by Gary E.Sherman
6 email : sherman at mrcc.com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#ifndef QGSFIELD_H
17#define QGSFIELD_H
18
19#include "qgis.h"
20#include "qgis_core.h"
21#include "qgis_sip.h"
22
23#include <QSharedDataPointer>
24#include <QString>
25#include <QVariant>
26#include <QVector>
27
28using namespace Qt::StringLiterals;
29
30typedef QList<int> QgsAttributeList SIP_SKIP;
31
32/***************************************************************************
33 * This class is considered CRITICAL and any change MUST be accompanied with
34 * full unit tests in testqgsfield.cpp.
35 * See details in QEP #17
36 ****************************************************************************/
37
39#include "qgsfieldconstraints.h"
40#include "qgsdefaultvalue.h"
41#include "qgis.h"
42
43class QgsFieldPrivate;
44
54
55class CORE_EXPORT QgsField
56{
57 Q_GADGET
58
59 Q_PROPERTY( bool isNumeric READ isNumeric )
60 Q_PROPERTY( bool isDateOrTime READ isDateOrTime )
61 Q_PROPERTY( int length READ length WRITE setLength )
62 Q_PROPERTY( int precision READ precision WRITE setPrecision )
63 Q_PROPERTY( QMetaType::Type type READ type WRITE setType )
64 Q_PROPERTY( QString comment READ comment WRITE setComment )
65 Q_PROPERTY( QString name READ name WRITE setName )
66 Q_PROPERTY( QString alias READ alias WRITE setAlias )
69 Q_PROPERTY( Qgis::FieldConfigurationFlags configurationFlags READ configurationFlags WRITE setConfigurationFlags )
70 Q_PROPERTY( bool isReadOnly READ isReadOnly WRITE setReadOnly )
71
72 public:
73 // clang-format off
89 QgsField( const QString &name = QString(), QMetaType::Type type = QMetaType::Type::UnknownType, const QString &typeName = QString(), int len = 0, int prec = 0, const QString &comment = QString(), QMetaType::Type subType = QMetaType::Type::UnknownType ) SIP_HOLDGIL;
90 // clang-format on
91
92
109 Q_DECL_DEPRECATED QgsField( const QString &name,
110 QVariant::Type type,
111 const QString &typeName = QString(),
112 int len = 0,
113 int prec = 0,
114 const QString &comment = QString(),
115 QVariant::Type subType = QVariant::Invalid ) SIP_HOLDGIL SIP_DEPRECATED;
116
117 QgsField( const QgsField &other ) SIP_HOLDGIL;
118 QgsField &operator =( const QgsField &other ) SIP_SKIP;
119
120 virtual ~QgsField();
121
122 bool operator==( const QgsField &other ) const SIP_HOLDGIL;
123 bool operator!=( const QgsField &other ) const SIP_HOLDGIL;
124
130 QString name() const SIP_HOLDGIL;
131
138 QString displayName() const SIP_HOLDGIL;
139
151 QString displayNameWithAlias() const SIP_HOLDGIL;
152
163 QString displayType( bool showConstraints = false ) const SIP_HOLDGIL;
164
175 QString friendlyTypeString() const SIP_HOLDGIL;
176
178 QMetaType::Type type() const SIP_HOLDGIL;
179
185 QMetaType::Type subType() const SIP_HOLDGIL;
186
193 QString typeName() const SIP_HOLDGIL;
194
199 int length() const SIP_HOLDGIL;
200
205 int precision() const SIP_HOLDGIL;
206
210 QString comment() const SIP_HOLDGIL;
211
220 QMap< int, QVariant > metadata() const SIP_HOLDGIL;
221
228 QVariant metadata( Qgis::FieldMetadataProperty property ) const SIP_SKIP;
229
236 QVariant metadata( int property ) const SIP_HOLDGIL;
237
246 void setMetadata( const QMap< int, QVariant > metadata ) SIP_HOLDGIL;
247
254 void setMetadata( Qgis::FieldMetadataProperty property, const QVariant &value ) SIP_SKIP;
255
262 void setMetadata( int property, const QVariant &value ) SIP_HOLDGIL;
263
268 bool isNumeric() const SIP_HOLDGIL;
269
275 bool isDateOrTime() const SIP_HOLDGIL;
276
281 void setName( const QString &name ) SIP_HOLDGIL;
282
286 void setType( QMetaType::Type type ) SIP_HOLDGIL;
287
292 Q_DECL_DEPRECATED void setType( QVariant::Type type ) SIP_HOLDGIL SIP_DEPRECATED;
293
299 void setSubType( QMetaType::Type subType ) SIP_HOLDGIL;
300
307 Q_DECL_DEPRECATED void setSubType( QVariant::Type subType ) SIP_HOLDGIL SIP_DEPRECATED;
308
313 void setTypeName( const QString &typeName ) SIP_HOLDGIL;
314
319 void setLength( int len ) SIP_HOLDGIL;
320
326
330 void setComment( const QString &comment ) SIP_HOLDGIL;
331
339
347
353
359
365 QString alias() const SIP_HOLDGIL;
366
372 void setAlias( const QString &alias ) SIP_HOLDGIL;
373
379 Qgis::FieldConfigurationFlags configurationFlags() const SIP_HOLDGIL;
380
386 void setConfigurationFlags( Qgis::FieldConfigurationFlags flags ) SIP_HOLDGIL;
387
389 QString displayString( const QVariant &v ) const;
390
395 static QString readableConfigurationFlag( Qgis::FieldConfigurationFlag flag ) SIP_HOLDGIL;
396
397#ifndef SIP_RUN
398
407 bool convertCompatible( QVariant &v, QString *errorMessage = nullptr ) const;
408#else
409// clang-format off
410
418 bool convertCompatible( QVariant &v ) const;
419 % MethodCode
420 PyObject *sipParseErr = NULL;
421
422 {
423 QVariant *a0;
424 int a0State = 0;
425 const QgsField *sipCpp;
426
427 if ( sipParseArgs( &sipParseErr, sipArgs, "BJ1", &sipSelf, sipType_QgsField, &sipCpp, sipType_QVariant, &a0, &a0State ) )
428 {
429 bool sipRes;
430 QString errorMessage;
431
432 Py_BEGIN_ALLOW_THREADS
433 try
434 {
435 sipRes = sipCpp->convertCompatible( *a0, &errorMessage );
436 }
437 catch ( ... )
438 {
439 Py_BLOCK_THREADS
440
441 sipReleaseType( a0, sipType_QVariant, a0State );
442 sipRaiseUnknownException();
443 return NULL;
444 }
445
446 Py_END_ALLOW_THREADS
447
448 if ( !sipRes )
449 {
450 PyErr_SetString( PyExc_ValueError,
451 QString( "Value could not be converted to field type %1: %2" ).arg( QMetaType::typeName( sipCpp->type() ), errorMessage ).toUtf8().constData() );
452 sipIsErr = 1;
453 }
454 else
455 {
456 PyObject *res = sipConvertFromType( a0, sipType_QVariant, NULL );
457 sipReleaseType( a0, sipType_QVariant, a0State );
458 return res;
459 }
460 }
461 else
462 {
463 // Raise an exception if the arguments couldn't be parsed.
464 sipNoMethod( sipParseErr, sipName_QgsField, sipName_convertCompatible, doc_QgsField_convertCompatible );
465
466 return nullptr;
467 }
468 }
469
470 % End
471// clang-format on
472#endif
473
475 operator QVariant() const;
476
482 void setEditorWidgetSetup( const QgsEditorWidgetSetup &v ) SIP_HOLDGIL;
483
492 QgsEditorWidgetSetup editorWidgetSetup() const SIP_HOLDGIL;
493
499 void setReadOnly( bool readOnly ) SIP_HOLDGIL;
500
506 bool isReadOnly() const SIP_HOLDGIL;
507
516 Qgis::FieldDomainSplitPolicy splitPolicy() const SIP_HOLDGIL;
517
526 void setSplitPolicy( Qgis::FieldDomainSplitPolicy policy ) SIP_HOLDGIL;
527
536 Qgis::FieldDuplicatePolicy duplicatePolicy() const SIP_HOLDGIL;
537
546 void setDuplicatePolicy( Qgis::FieldDuplicatePolicy policy ) SIP_HOLDGIL;
547
556 Qgis::FieldDomainMergePolicy mergePolicy() const SIP_HOLDGIL;
557
566 void setMergePolicy( Qgis::FieldDomainMergePolicy policy ) SIP_HOLDGIL;
567
568#ifdef SIP_RUN
569// clang-format off
570 SIP_PYOBJECT __repr__();
571 % MethodCode
572 QString str = u"<QgsField: %1 (%2)>"_s.arg( sipCpp->name() ).arg( sipCpp->typeName() );
573 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
574 % End
575// clang-format on
576#endif
577
578#ifndef SIP_RUN
579 static constexpr int MAX_WKT_LENGTH = 999;
580#endif
581
582 private:
583
584 QSharedDataPointer<QgsFieldPrivate> d;
585
586
587}; // class QgsField
588
590
591
592CORE_EXPORT QDataStream &operator<<( QDataStream &out, const QgsField &field );
594CORE_EXPORT QDataStream &operator>>( QDataStream &in, QgsField &field );
595
596
597#endif
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:62
Provides a container for managing client side default values for fields.
Stores information about constraints which may be present on a field.
Encapsulate a field in an attribute table or data source.
Definition qgsfield.h:56
QMetaType::Type type
Definition qgsfield.h:63
bool isDateOrTime
Definition qgsfield.h:60
QString typeName() const
Gets the field type.
Definition qgsfield.cpp:158
void setConstraints(const QgsFieldConstraints &constraints)
Sets constraints which are present for the field.
Definition qgsfield.cpp:278
void setAlias(const QString &alias)
Sets the alias for the field (the friendly displayed name of the field ).
Definition qgsfield.cpp:293
QString name
Definition qgsfield.h:65
int precision
Definition qgsfield.h:62
int length
Definition qgsfield.h:61
QString displayString(const QVariant &v) const
Formats string for display.
Definition qgsfield.cpp:314
void setPrecision(int precision)
Set the field precision.
Definition qgsfield.cpp:258
QString displayNameWithAlias() const
Returns the name to use when displaying this field and adds the alias in parenthesis if it is defined...
Definition qgsfield.cpp:104
QgsField(const QString &name=QString(), QMetaType::Type type=QMetaType::Type::UnknownType, const QString &typeName=QString(), int len=0, int prec=0, const QString &comment=QString(), QMetaType::Type subType=QMetaType::Type::UnknownType)
Constructor.
Definition qgsfield.cpp:54
bool convertCompatible(QVariant &v, QString *errorMessage=nullptr) const
Converts the provided variant to a compatible format.
Definition qgsfield.cpp:470
void setSubType(QMetaType::Type subType)
If the field is a collection, set its element's type.
Definition qgsfield.cpp:239
void setName(const QString &name)
Set the field name.
Definition qgsfield.cpp:224
void setComment(const QString &comment)
Set the field comment.
Definition qgsfield.cpp:263
void setType(QMetaType::Type type)
Set variant type.
Definition qgsfield.cpp:229
QString displayType(bool showConstraints=false) const
Returns the type to use when displaying this field, including the length and precision of the datatyp...
Definition qgsfield.cpp:113
void setConfigurationFlags(Qgis::FieldConfigurationFlags flags)
Sets the Flags for the field (searchable, …).
Definition qgsfield.cpp:303
void setLength(int len)
Set the field length.
Definition qgsfield.cpp:254
QString displayName() const
Returns the name to use when displaying this field.
Definition qgsfield.cpp:96
void setDefaultValueDefinition(const QgsDefaultValue &defaultValueDefinition)
Sets an expression to use when calculating the default value for the field.
Definition qgsfield.cpp:273
QString friendlyTypeString() const
Returns a user friendly, translated representation of the field type.
Definition qgsfield.cpp:136
void setReadOnly(bool readOnly)
Make field read-only if readOnly is set to true.
Definition qgsfield.cpp:744
QMap< int, QVariant > metadata() const
Returns the map of field metadata.
Definition qgsfield.cpp:183
static QString readableConfigurationFlag(Qgis::FieldConfigurationFlag flag)
Returns the readable and translated value of the configuration flag.
Definition qgsfield.cpp:448
Qgis::FieldConfigurationFlags configurationFlags
Definition qgsfield.h:69
QMetaType::Type subType() const
If the field is a collection, gets its element's type.
Definition qgsfield.cpp:153
QString alias
Definition qgsfield.h:66
static constexpr int MAX_WKT_LENGTH
Definition qgsfield.h:579
QgsDefaultValue defaultValueDefinition
Definition qgsfield.h:67
bool isNumeric
Definition qgsfield.h:59
void setMetadata(const QMap< int, QVariant > metadata)
Sets the map of field metadata.
Definition qgsfield.cpp:193
QString comment
Definition qgsfield.h:64
QgsFieldConstraints constraints
Definition qgsfield.h:68
bool isReadOnly
Definition qgsfield.h:70
void setTypeName(const QString &typeName)
Set the field type.
Definition qgsfield.cpp:249
#define SIP_DEPRECATED
Definition qgis_sip.h:113
#define SIP_SKIP
Definition qgis_sip.h:133
#define SIP_HOLDGIL
Definition qgis_sip.h:178
Q_DECLARE_METATYPE(QgsDatabaseQueryLogEntry)
QList< int > QgsAttributeList
Definition qgsfield.h:30
CORE_EXPORT QDataStream & operator>>(QDataStream &in, QgsField &field)
Reads a field from stream in into field. QGIS version compatibility is not guaranteed.
Definition qgsfield.cpp:817
CORE_EXPORT QDataStream & operator<<(QDataStream &out, const QgsField &field)
Writes the field to stream out. QGIS version compatibility is not guaranteed.
Definition qgsfield.cpp:790