28 : QAbstractItemModel( parent )
34 QString fldName( fieldName );
39 if (
mLayer && !fldName.isEmpty() )
45 if ( !fieldNameWithAlias.isNull() )
46 fldName = fieldNameWithAlias;
58 QModelIndex idx =
index( r, 0 );
88 disconnect(
mLayer, &QObject::destroyed,
this, &QgsFieldModel::layerDeleted );
96 connect(
mLayer, &QObject::destroyed,
this, &QgsFieldModel::layerDeleted );
102void QgsFieldModel::layerDeleted()
147 for (
int i = 0; i < newFields.
count(); ++i )
157 beginRemoveRows( QModelIndex(), i + offset, i + offset );
192 beginRemoveRows( QModelIndex(), start, end );
205 beginInsertRows( QModelIndex(), 0, 0 );
211 beginRemoveRows( QModelIndex(), 0, 0 );
229 if ( !expression.isEmpty() )
243 if ( hasIndex( row, column,
parent ) )
245 return createIndex( row, column, row );
248 return QModelIndex();
254 return QModelIndex();
275 if ( !
index.isValid() )
288 if ( isEmpty || exprIdx >= 0 )
315 if ( isEmpty || exprIdx >= 0 )
319 return index.row() - fieldOffset;
344 if ( exprIdx < 0 && !isEmpty )
347 return static_cast< int >( field.
type() );
354 if ( exprIdx < 0 && !isEmpty )
368 if ( exprIdx < 0 && !isEmpty )
377 if ( exprIdx < 0 && !isEmpty )
399 case Qt::DisplayRole:
401 case Qt::ToolTipRole:
407 else if ( exprIdx >= 0 )
411 else if ( role == Qt::EditRole )
415 else if ( role == Qt::ToolTipRole )
431 case Qt::ForegroundRole:
433 if ( !isEmpty && exprIdx >= 0 )
444 return QBrush( QColor( Qt::red ) );
452 if ( !isEmpty && exprIdx >= 0 )
455 QFont font = QFont();
456 font.setItalic(
true );
462 case Qt::DecorationRole:
464 if ( !isEmpty && exprIdx < 0 )
479 if ( !field.
alias().isEmpty() )
481 toolTip = QStringLiteral(
"<b>%1</b> (%2)" ).arg( field.
alias(), field.
name() );
485 toolTip = QStringLiteral(
"<b>%1</b>" ).arg( field.
name() );
488 toolTip += QStringLiteral(
"<br><font style='font-family:monospace; white-space: nowrap;'>%3</font>" ).arg( field.
displayType(
true ) );
490 const QString comment = field.
comment();
492 if ( ! comment.isEmpty() )
494 toolTip += QStringLiteral(
"<br><em>%1</em>" ).arg( comment );
513 if ( !expressionString.isEmpty() )
515 toolTip += QStringLiteral(
"<br><font style='font-family:monospace;'>%3</font>" ).arg( expressionString );
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void setFields(const QgsFields &fields)
Convenience function for setting a fields for the context.
Class for parsing and evaluation of expressions (formerly called "search strings").
bool prepare(const QgsExpressionContext *context)
Gets the expression ready for evaluation - find out column indexes.
bool hasParserError() const
Returns true if an error occurred when parsing the input expression.
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
@ FieldOriginRole
Return the field origin (if a field, returns QVariant if expression)
@ FieldIndexRole
Return field index if index corresponds to a field.
@ ExpressionRole
Return field name or expression.
@ JoinedFieldIsEditable
true if a joined field is editable (returns QVariant if not a joined field)
@ ExpressionValidityRole
Return if expression is valid or not.
@ IsExpressionRole
Return if index corresponds to an expression.
@ FieldTypeRole
Return the field type (if a field, return QVariant if expression)
@ EditorWidgetType
Editor widget type.
@ FieldNameRole
Return field name if index corresponds to a field.
@ IsEmptyRole
Return if the index corresponds to the empty value.
@ FieldIsWidgetEditable
true if a is editable from the widget
static QString fieldToolTip(const QgsField &field)
Returns a HTML formatted tooltip string for a field, containing details like the field name,...
int columnCount(const QModelIndex &parent) const override
QVariant data(const QModelIndex &index, int role) const override
QModelIndex parent(const QModelIndex &child) const override
void removeExpression()
Removes any custom expression from the model.
bool isField(const QString &expression) const
Returns true if a string represents a field reference, or false if it is an expression consisting of ...
void setAllowExpression(bool allowExpression)
Sets whether custom expressions are accepted and displayed in the model.
void setLayer(QgsVectorLayer *layer)
Set the layer from which fields are displayed.
void setExpression(const QString &expression)
Sets a single expression to be added after the fields at the end of the model.
QgsFields fields() const
Returns the fields currently shown in the model.
void setFields(const QgsFields &fields)
Manually sets the fields to use for the model.
QgsFieldModel(QObject *parent=nullptr)
Constructor for QgsFieldModel - creates a model to display the fields of a given layer.
static QString fieldToolTipExtended(const QgsField &field, const QgsVectorLayer *layer)
Returns a HTML formatted tooltip string for a field, containing details like the field name,...
QList< QString > mExpression
QModelIndex indexFromName(const QString &fieldName)
Returns the index corresponding to a given fieldName.
void setAllowEmptyFieldName(bool allowEmpty)
Sets whether an optional empty field ("not set") option is present in the model.
int rowCount(const QModelIndex &parent=QModelIndex()) const override
virtual void updateModel()
Called when the model must be updated.
Encapsulate a field in an attribute table or data source.
QString displayType(bool showConstraints=false) const
Returns the type to use when displaying this field, including the length and precision of the datatyp...
QString displayName() const
Returns the name to use when displaying this field.
QgsEditorWidgetSetup editorWidgetSetup() const
Gets the editor widget setup for the field.
Container of fields for a vector layer.
QList< QgsField > toList() const
Utility function to return a list of QgsField instances.
int indexFromName(const QString &fieldName) const
Gets the field index from the field name.
int indexOf(const QString &fieldName) const
Gets the field index from the field name.
void remove(int fieldIdx)
Removes the field with the given index.
@ OriginExpression
Field is calculated from an expression.
@ OriginJoin
Field comes from a joined layer (originIndex / 1000 = index of the join, originIndex % 1000 = index w...
int count() const
Returns number of items.
FieldOrigin fieldOrigin(int fieldIdx) const
Returns the field's origin (value from an enumeration).
QgsField field(int fieldIdx) const
Returns the field at particular index (must be in range 0..N-1).
int size() const
Returns number of items.
QgsField at(int i) const
Returns the field at particular index (must be in range 0..N-1).
int lookupField(const QString &fieldName) const
Looks up field's index from the field name.
QIcon iconForField(int fieldIdx, bool considerOrigin=false) const
Returns an icon corresponding to a field index, based on the field's type and source.
const QgsVectorLayerJoinInfo * joinForFieldIndex(int index, const QgsFields &fields, int &sourceFieldIndex) const
Finds the vector join for a layer field index.
Defines left outer join from our vector layer to some other vector layer.
bool isEditable() const
Returns whether joined fields may be edited through the form of the target layer.
Represents a vector layer which manages a vector based data sets.
QString attributeDisplayName(int index) const
Convenience function that returns the attribute alias if defined or the field name else.
QgsFields fields() const FINAL
Returns the list of fields of this layer.
QString expressionField(int index) const
Returns the expression used for a given expression field.
QgsStringMap attributeAliases() const
Returns a map of field name to attribute alias.
QgsVectorLayerJoinBuffer * joinBuffer()
Returns the join buffer object.
void updatedFields()
Emitted whenever the fields available from this layer have been changed.
QgsEditFormConfig editFormConfig