QGIS API Documentation
3.26.3-Buenos Aires (65e4edfdad)
|
Go to the documentation of this file.
26 #include <QRegularExpression>
30 , mDescription( description )
31 , mStandardType( type )
35 switch ( mStandardType )
39 mHelpText = QObject::tr(
"bool [<b>1</b>=True|<b>0</b>=False]" );
44 mHelpText = QObject::tr(
"int [≤ 0 ≥]" );
49 mHelpText = QObject::tr(
"int [≥ 0]" );
54 mHelpText = QObject::tr(
"int [≥ 1]" );
59 mHelpText = QObject::tr(
"double [≤ 0.0 ≥]" );
64 mHelpText = QObject::tr(
"double [≥ 0.0]" );
69 mHelpText = QObject::tr(
"double [0.0-1.0]" );
74 mHelpText = QObject::tr(
"double [0.0-360.0]" );
79 mHelpText = QObject::tr(
"string of variable length" );
84 mHelpText = QObject::tr(
"int [0-100]" );
89 mHelpText = trString() + QStringLiteral(
"[<b>MM</b>|<b>MapUnit</b>|<b>Pixel</b>|<b>Point</b>]" );
94 mHelpText = QObject::tr(
"string [<b>r,g,b,a</b>] as int 0-255 or #<b>AARRGGBB</b> as hex or <b>color</b> as color's name" );
99 mHelpText = QObject::tr(
"string [<b>r,g,b</b>] as int 0-255 or #<b>RRGGBB</b> as hex or <b>color</b> as color's name" );
104 mHelpText = trString() + QStringLiteral(
"[<b>bevel</b>|<b>miter</b>|<b>round</b>]" );
109 mHelpText = trString() + QStringLiteral(
"[<b>Normal</b>|<b>Lighten</b>|<b>Screen</b>|<b>Dodge</b>|<br>"
110 "<b>Addition</b>|<b>Darken</b>|<b>Multiply</b>|<b>Burn</b>|<b>Overlay</b>|<br>"
111 "<b>SoftLight</b>|<b>HardLight</b>|<b>Difference</b>|<b>Subtract</b>]" );
116 mHelpText = QObject::tr(
"double coord [<b>X,Y</b>]" );
121 mHelpText = QObject::tr(
"double [≥ 0.0]" );
126 mHelpText = QObject::tr(
"string of doubles '<b>width,height</b>' or array of doubles <b>[width, height]</b>" );
131 mHelpText = trString() + QStringLiteral(
"[<b>no</b>|<b>solid</b>|<b>dash</b>|<b>dot</b>|<b>dash dot</b>|<b>dash dot dot</b>]" );
136 mHelpText = QObject::tr(
"double [≥ 0.0]" );
141 mHelpText = trString() + QStringLiteral(
"[<b>solid</b>|<b>horizontal</b>|<b>vertical</b>|<b>cross</b>|<b>b_diagonal</b>|<b>f_diagonal"
142 "</b>|<b>diagonal_x</b>|<b>dense1</b>|<b>dense2</b>|<b>dense3</b>|<b>dense4</b>|<b>dense5"
143 "</b>|<b>dense6</b>|<b>dense7</b>|<b>no]" );
148 mHelpText = trString() + QStringLiteral(
"[<b>square</b>|<b>flat</b>|<b>round</b>]" );
153 mHelpText = trString() + QStringLiteral(
"[<b>left</b>|<b>center</b>|<b>right</b>]" );
158 mHelpText = trString() + QStringLiteral(
"[<b>top</b>|<b>center</b>|<b>bottom</b>]" );
163 mHelpText = trString() + QStringLiteral(
"[<b>filepath</b>] as<br>"
164 "<b>''</b>=empty|absolute|search-paths-relative|<br>"
165 "project-relative|URL" );
170 mHelpText = QObject::tr(
"string of doubles '<b>x,y</b>' or array of doubles <b>[x, y]</b>" );
175 mHelpText = QObject::tr(
"DateTime or string representation of a DateTime" );
185 , mDescription( description )
187 , mHelpText( helpText )
189 , mComment( comment )
198 QString QgsPropertyDefinition::trString()
201 return QObject::tr(
"string " );
210 QVariantMap variantMap;
211 QMap<QString, QgsProperty>::const_iterator it = propertyMap.constBegin();
212 for ( ; it != propertyMap.constEnd(); ++it )
213 variantMap.insert( it.key(), it.value().toVariant() );
219 QMap<QString, QgsProperty> propertyMap;
220 QVariantMap::const_iterator it = variantMap.constBegin();
221 for ( ; it != variantMap.constEnd(); ++it )
225 propertyMap.insert( it.key(), property );
232 d =
new QgsPropertyPrivate();
273 return d->active == other.d->active
274 && d->type == other.d->type
275 && ( d->type !=
StaticProperty || d->staticValue == other.d->staticValue )
278 && ( ( !d->transformer && !other.d->transformer ) || ( d->transformer && other.d->transformer && d->transformer->toExpression( QString() ) == other.d->transformer->toExpression( QString() ) ) );
283 return ( !( ( *
this ) == other ) );
288 return static_cast< Type >( d->type );
338 d->staticValue =
value;
346 return d->staticValue;
353 d->fieldName =
field;
354 d->cachedFieldIdx = -1;
365 QgsProperty::operator bool()
const
367 return d->type != InvalidProperty;
373 d->expressionString = expression;
375 d->expressionPrepared =
false;
376 d->expressionIsInvalid =
false;
378 if ( d->expressionString.isEmpty() )
394 return d->expressionString;
412 exp = d->expressionString;
419 return d->transformer ? d->transformer->toExpression( exp ) : exp;
444 if ( !d->expression.prepare( &context ) )
446 d->expressionReferencedCols.clear();
447 d->expressionPrepared =
false;
448 d->expressionIsInvalid =
true;
452 d->expressionPrepared =
true;
453 d->expressionIsInvalid =
false;
454 d->expressionReferencedCols = d->expression.referencedColumns();
469 return QSet<QString>();
475 return QSet<QString>();
479 QSet< QString > fields;
480 if ( !d->fieldName.isEmpty() )
481 fields.insert( d->fieldName );
489 return d->expression.referencedColumns();
492 if ( d->expressionIsInvalid )
493 return QSet< QString >();
496 if ( !d->expressionPrepared && !
prepare( context ) )
498 d->expressionIsInvalid =
true;
499 return QSet< QString >();
502 return d->expressionReferencedCols;
506 return QSet<QString>();
511 const QRegularExpression rx( QStringLiteral(
"^project_color\\('.*'\\)$" ) );
513 && rx.match( d->expressionString ).hasMatch();
516 QVariant QgsProperty::propertyValue(
const QgsExpressionContext &context,
const QVariant &defaultValue,
bool *ok )
const
530 return d->staticValue;
540 if ( d->cachedFieldIdx >= 0 )
547 if ( d->cachedFieldIdx < 0 )
557 if ( d->expressionIsInvalid )
560 if ( !d->expressionPrepared && !
prepare( context ) )
563 QVariant result = d->expression.evaluate( &context );
564 if ( !result.isNull() )
591 QVariant val = propertyValue( context, defaultValue, &valOk );
592 if ( !d->transformer && !valOk )
595 if ( d->transformer )
599 val = d->transformer->transform( context, val );
611 const QVariant val =
value( context, defaultDateTime, &valOk );
613 if ( !valOk || val.isNull() )
617 return defaultDateTime;
621 if ( val.type() == QVariant::DateTime )
623 dateTime = val.value<QDateTime>();
627 dateTime = val.toDateTime();
630 if ( !dateTime.isValid() )
631 return defaultDateTime;
643 const QVariant val =
value( context, defaultString, &valOk );
645 if ( !valOk || val.isNull() )
649 return defaultString;
655 return val.toString();
665 const QVariant val =
value( context, defaultColor, &valOk );
667 if ( !valOk || val.isNull() )
671 if ( val.type() == QVariant::Color )
673 color = val.value<QColor>();
680 if ( !color.isValid() )
696 const QVariant val =
value( context, defaultValue, &valOk );
698 if ( !valOk || val.isNull() )
701 bool convertOk =
false;
702 const double dbl = val.toDouble( &convertOk );
719 const QVariant val =
value( context, defaultValue, &valOk );
721 if ( !valOk || val.isNull() )
724 bool convertOk =
false;
725 const int integer = val.toInt( &convertOk );
729 const double dbl = val.toDouble( &convertOk );
734 return std::round( dbl );
755 const QVariant val =
value( context, defaultValue, &valOk );
757 if ( !valOk || val.isNull() )
767 QVariantMap propertyMap;
769 propertyMap.insert( QStringLiteral(
"active" ), d->active );
770 propertyMap.insert( QStringLiteral(
"type" ), d->type );
776 propertyMap.insert( QStringLiteral(
"val" ), d->staticValue.toString() );
780 propertyMap.insert( QStringLiteral(
"field" ), d->fieldName );
784 propertyMap.insert( QStringLiteral(
"expression" ), d->expressionString );
791 if ( d->transformer )
794 transformer.insert( QStringLiteral(
"t" ), d->transformer->transformerType() );
795 transformer.insert( QStringLiteral(
"d" ), d->transformer->toVariant() );
797 propertyMap.insert( QStringLiteral(
"transformer" ),
transformer );
805 const QVariantMap propertyMap =
property.toMap();
808 d->active = propertyMap.value( QStringLiteral(
"active" ) ).toBool();
809 d->type =
static_cast< Type >( propertyMap.value( QStringLiteral(
"type" ),
InvalidProperty ).toInt() );
814 d->staticValue = propertyMap.value( QStringLiteral(
"val" ) );
819 d->fieldName = propertyMap.value( QStringLiteral(
"field" ) ).toString();
820 if ( d->fieldName.isEmpty() )
825 d->expressionString = propertyMap.value( QStringLiteral(
"expression" ) ).toString();
826 if ( d->expressionString.isEmpty() )
830 d->expressionPrepared =
false;
831 d->expressionIsInvalid =
false;
832 d->expressionReferencedCols.clear();
841 delete d->transformer;
842 d->transformer =
nullptr;
845 const QVariant transform = propertyMap.value( QStringLiteral(
"transformer" ) );
847 if ( transform.isValid() )
849 const QVariantMap transformerMap = transform.toMap();
873 return d->transformer;
881 if ( d->transformer )
884 QString baseExpression;
892 if ( !fieldName.isEmpty() )
@ RenderUnits
Render units (eg mm/pixels/map units)
void setTransformer(QgsPropertyTransformer *transformer)
Sets an optional transformer to use for manipulating the calculated values for the property.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
bool isActive() const
Returns whether the property is currently active.
static QgsProperty fromField(const QString &fieldName, bool isActive=true)
Returns a new FieldBasedProperty created from the specified field name.
static QMap< QString, QgsProperty > variantMapToPropertyMap(const QVariantMap &variantMap)
Convert a map of QVariant to a map of QgsProperty This is useful to restore a map of properties.
bool operator==(const QgsProperty &other) const
StandardPropertyTemplate
Predefined standard property templates.
A store for object properties.
@ HorizontalAnchor
Horizontal anchor point.
QgsProperty & operator=(const QgsProperty &other)
@ DataTypeString
Property requires a string value.
const QgsExpressionNode * rootNode() const
Returns the root node of the expression.
@ FieldBasedProperty
Field based property (QgsFieldBasedProperty)
Container of fields for a vector layer.
QString asExpression() const
Returns an expression string representing the state of the property, or an empty string if the proper...
@ IntegerPositiveGreaterZero
Non-zero positive integer values.
@ DataTypeBoolean
Property requires a boolean value.
@ FillStyle
Fill style (eg solid, lines)
@ DataTypeNumeric
Property requires a numeric value.
@ Double
Double value (including negative values)
@ PenJoinStyle
Pen join style.
bool isProjectColor() const
Returns true if the property is set to a linked project color.
static QgsProperty fromExpression(const QString &expression, bool isActive=true)
Returns a new ExpressionBasedProperty created from the specified expression.
Type propertyType() const
Returns the property type.
QgsProperty()
Constructor for a QgsProperty.
QColor valueAsColor(const QgsExpressionContext &context, const QColor &defaultColor=QColor(), bool *ok=nullptr) const
Calculates the current value of the property and interprets it as a color.
bool loadVariant(const QVariant &property)
Loads this property from a QVariantMap, wrapped in a QVariant.
@ DateTime
DateTime value.
const QgsPropertyTransformer * transformer() const
Returns the existing transformer used for manipulating the calculated values for the property,...
static QColor decodeColor(const QString &str)
QVariant value(const QgsExpressionContext &context, const QVariant &defaultValue=QVariant(), bool *ok=nullptr) const
Calculates the current value of the property, including any transforms which are set for the property...
QgsFields fields() const
Convenience function for retrieving the fields for the context, if set.
QSet< QString > referencedFields(const QgsExpressionContext &context=QgsExpressionContext(), bool ignoreContext=false) const
Returns the set of any fields referenced by the property for a specified expression context.
void setActive(bool active)
Sets whether the property is currently active.
@ String
Any string value.
QString expressionString() const
Returns the expression used for the property value.
static QString quotedValue(const QVariant &value)
Returns a string representation of a literal value, including appropriate quotations where required.
@ Rotation
Rotation (value between 0-360 degrees)
static QgsProperty fromValue(const QVariant &value, bool isActive=true)
Returns a new StaticProperty created from the specified value.
bool isStaticValueInContext(const QgsExpressionContext &context, QVariant &staticValue) const
Returns true if the property is effectively a static value in the specified context.
bool convertToTransformer()
Attempts to convert an existing expression based property to a base expression with corresponding tra...
@ ExpressionBasedProperty
Expression based property (QgsExpressionBasedProperty)
DataType
Valid data types required by property.
static QVariantMap propertyMapToVariantMap(const QMap< QString, QgsProperty > &propertyMap)
Convert a map of QgsProperty to a map of QVariant This is useful to save a map of properties.
QVariant toVariant() const
Saves this property to a QVariantMap, wrapped in a QVariant.
void setField(const QString &field)
Sets the field name the property references.
bool isValid() const
Returns the validity of this feature.
@ VerticalAnchor
Vertical anchor point.
@ ColorWithAlpha
Color with alpha channel.
@ CapStyle
Line cap style (eg round)
void setExpressionString(const QString &expression)
Sets the expression to use for the property value.
QVariant attribute(const QString &name) const
Lookup attribute value by attribute name.
QString valueAsString(const QgsExpressionContext &context, const QString &defaultString=QString(), bool *ok=nullptr) const
Calculates the current value of the property and interprets it as a string.
bool prepare(const QgsExpressionContext *context)
Gets the expression ready for evaluation - find out column indexes.
@ Double0To1
Double value between 0-1 (inclusive)
bool valueAsBool(const QgsExpressionContext &context, bool defaultValue=false, bool *ok=nullptr) const
Calculates the current value of the property and interprets it as an boolean.
@ IntegerPositive
Positive integer values (including 0)
@ Size
1D size (eg marker radius, or square marker height/width)
bool operator!=(const QgsProperty &other) const
@ LineStyle
Line style (eg solid/dashed)
@ Size2D
2D size (width/height different)
QgsFeature feature() const
Convenience function for retrieving the feature for the context, if set.
QString field() const
Returns the current field name the property references.
@ Integer
Integer value (including negative values)
void setStaticValue(const QVariant &value)
Sets the static value for the property.
static QString quotedColumnRef(QString name)
Returns a quoted column reference (in double quotes)
double valueAsDouble(const QgsExpressionContext &context, double defaultValue=0.0, bool *ok=nullptr) const
Calculates the current value of the property and interprets it as a double.
QDateTime valueAsDateTime(const QgsExpressionContext &context, const QDateTime &defaultDateTime=QDateTime(), bool *ok=nullptr) const
Calculates the current value of the property and interprets it as a datetime.
bool hasCachedStaticValue() const
Returns true if the node can be replaced by a static cached value.
bool supportsAssistant() const
Returns true if the property is of a type which is compatible with property override assistants.
@ SvgPath
Path to an SVG file.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
QVariant staticValue() const
Returns the current static value for the property.
bool prepare(const QgsExpressionContext &context=QgsExpressionContext()) const
Prepares the property against a specified expression context.
QgsPropertyDefinition()=default
Constructs an empty property.
int lookupField(const QString &fieldName) const
Looks up field's index from the field name.
Class for parsing and evaluation of expressions (formerly called "search strings")....
@ StaticProperty
Static property (QgsStaticProperty)
int valueAsInt(const QgsExpressionContext &context, int defaultValue=0, bool *ok=nullptr) const
Calculates the current value of the property and interprets it as an integer.
@ StrokeWidth
Line stroke width.
@ ColorNoAlpha
Color with no alpha channel.
@ InvalidProperty
Invalid (not set) property.
@ Custom
Custom property types.
@ DoublePositive
Positive double value (including 0)
QVariant cachedStaticValue() const
Returns the node's static cached value.