本文整理汇总了C++中createExpressionContext函数的典型用法代码示例。如果您正苦于以下问题:C++ createExpressionContext函数的具体用法?C++ createExpressionContext怎么用?C++ createExpressionContext使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了createExpressionContext函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: createExpressionContext
void QgsComposerItem::setBlendMode( const QPainter::CompositionMode blendMode )
{
mBlendMode = blendMode;
// Update the composer effect to use the new blend mode
QgsExpressionContext context = createExpressionContext();
refreshBlendMode( context );
}
示例2: createExpressionContext
void QgsLayoutItemPicture::refreshPicture( const QgsExpressionContext *context )
{
QgsExpressionContext scopedContext = createExpressionContext();
const QgsExpressionContext *evalContext = context ? context : &scopedContext;
QString source = mSourcePath;
//data defined source set?
mHasExpressionError = false;
if ( mDataDefinedProperties.isActive( QgsLayoutObject::PictureSource ) )
{
bool ok = false;
source = mDataDefinedProperties.valueAsString( QgsLayoutObject::PictureSource, *evalContext, source, &ok );
if ( ok )
{
source = source.trimmed();
QgsDebugMsg( QString( "exprVal PictureSource:%1" ).arg( source ) );
}
else
{
mHasExpressionError = true;
source = QString();
QgsMessageLog::logMessage( tr( "Picture expression eval error" ) );
}
}
loadPicture( source );
}
示例3: horizontalViewScaleFactor
void QgsComposerNodesItem::drawSelectedNode( QPainter *painter ) const
{
double rectSize = 3.0 / horizontalViewScaleFactor();
QgsStringMap properties;
properties.insert( "name", "square" );
properties.insert( "color", "0, 0, 0, 0" );
properties.insert( "color_border", "blue" );
properties.insert( "width_border", "4" );
QScopedPointer<QgsMarkerSymbolV2> symbol;
symbol.reset( QgsMarkerSymbolV2::createSimple( properties ) );
symbol.data()->setSize( rectSize );
QgsMapSettings ms = mComposition->mapSettings();
ms.setOutputDpi( painter->device()->logicalDpiX() );
QgsRenderContext context = QgsRenderContext::fromMapSettings( ms );
context.setPainter( painter );
context.setForceVectorOutput( true );
QScopedPointer<QgsExpressionContext> expressionContext;
expressionContext.reset( createExpressionContext() );
context.setExpressionContext( *expressionContext.data() );
symbol.data()->startRender( context );
symbol.data()->renderPoint( mPolygon.at( mSelectedNode ), nullptr, context );
symbol.data()->stopRender( context );
}
示例4: context
void QgsComposerItem::setBlendMode( const QPainter::CompositionMode blendMode )
{
mBlendMode = blendMode;
// Update the composer effect to use the new blend mode
QScopedPointer< QgsExpressionContext > context( createExpressionContext() );
refreshBlendMode( *context.data() );
}
示例5: createExpressionContext
bool QgsLayoutAtlas::updateFilenameExpression( QString &error )
{
if ( !mCoverageLayer )
{
return false;
}
QgsExpressionContext expressionContext = createExpressionContext();
if ( !mFilenameExpressionString.isEmpty() )
{
mFilenameExpression = QgsExpression( mFilenameExpressionString );
// expression used to evaluate each filename
// test for evaluation errors
if ( mFilenameExpression.hasParserError() )
{
error = mFilenameExpression.parserErrorString();
return false;
}
// prepare the filename expression
mFilenameExpression.prepare( &expressionContext );
}
// regenerate current filename
evalFeatureFilename( expressionContext );
return true;
}
示例6: horizontalViewScaleFactor
void QgsComposerNodesItem::drawNodes( QPainter *painter ) const
{
double rectSize = 3.0 / horizontalViewScaleFactor();
QgsStringMap properties;
properties.insert( QStringLiteral( "name" ), QStringLiteral( "cross" ) );
properties.insert( QStringLiteral( "color_border" ), QStringLiteral( "red" ) );
std::unique_ptr<QgsMarkerSymbol> symbol;
symbol.reset( QgsMarkerSymbol::createSimple( properties ) );
symbol->setSize( rectSize );
symbol->setAngle( 45 );
QgsRenderContext context = QgsComposerUtils::createRenderContextForComposition( mComposition, painter );
context.setForceVectorOutput( true );
QgsExpressionContext expressionContext = createExpressionContext();
context.setExpressionContext( expressionContext );
symbol->startRender( context );
Q_FOREACH ( QPointF pt, mPolygon )
symbol->renderPoint( pt, nullptr, context );
symbol->stopRender( context );
if ( mSelectedNode >= 0 && mSelectedNode < mPolygon.size() )
drawSelectedNode( painter );
}
示例7: createExpressionContext
bool QgsAtlasComposition::updateFilenameExpression()
{
if ( !mCoverageLayer )
{
return false;
}
QgsExpressionContext expressionContext = createExpressionContext();
if ( !mFilenamePattern.isEmpty() )
{
mFilenameExpr.reset( new QgsExpression( mFilenamePattern ) );
// expression used to evaluate each filename
// test for evaluation errors
if ( mFilenameExpr->hasParserError() )
{
mFilenameParserError = mFilenameExpr->parserErrorString();
return false;
}
// prepare the filename expression
mFilenameExpr->prepare( &expressionContext );
}
//if atlas preview is currently enabled, regenerate filename for current feature
if ( mComposition->atlasMode() == QgsComposition::PreviewAtlas )
{
evalFeatureFilename( expressionContext );
}
return true;
}
示例8: createExpressionContext
void QgsComposerPolygon::_draw( QPainter *painter )
{
//setup painter scaling to dots so that raster symbology is drawn to scale
const double dotsPerMM = painter->device()->logicalDpiX() / 25.4;
QgsMapSettings ms = mComposition->mapSettings();
ms.setOutputDpi( painter->device()->logicalDpiX() );
QgsRenderContext context = QgsRenderContext::fromMapSettings( ms );
context.setPainter( painter );
context.setForceVectorOutput( true );
QScopedPointer<QgsExpressionContext> expressionContext;
expressionContext.reset( createExpressionContext() );
context.setExpressionContext( *expressionContext.data() );
painter->scale( 1 / dotsPerMM, 1 / dotsPerMM ); // scale painter from mm to dots
QTransform t = QTransform::fromScale( dotsPerMM, dotsPerMM );
QList<QPolygonF> rings; //empty
QPainterPath polygonPath;
polygonPath.addPolygon( mPolygon );
mPolygonStyleSymbol->startRender( context );
mPolygonStyleSymbol->renderPolygon( polygonPath.toFillPolygon( t ), &rings,
nullptr, context );
mPolygonStyleSymbol->stopRender( context );
painter->scale( dotsPerMM, dotsPerMM );
}
示例9: createExpressionContext
void QgsComposerPicture::refreshPicture( const QgsExpressionContext *context )
{
const QgsExpressionContext* evalContext = context;
QScopedPointer< QgsExpressionContext > scopedContext;
if ( !evalContext )
{
scopedContext.reset( createExpressionContext() );
evalContext = scopedContext.data();
}
QString source = mSourcePath;
//data defined source set?
mHasExpressionError = false;
QVariant exprVal;
if ( dataDefinedProperty( QgsComposerObject::PictureSource )->isActive() )
{
if ( dataDefinedEvaluate( QgsComposerObject::PictureSource, exprVal, *evalContext ) )
{
source = exprVal.toString().trimmed();
QgsDebugMsg( QString( "exprVal PictureSource:%1" ).arg( source ) );
}
else
{
mHasExpressionError = true;
source = QString();
QgsMessageLog::logMessage( tr( "Picture expression eval error" ) );
}
}
loadPicture( source );
}
示例10: createExpressionContext
void QgsComposerLegend::refreshDataDefinedProperty( const QgsComposerObject::DataDefinedProperty property, const QgsExpressionContext *context )
{
QgsExpressionContext scopedContext = createExpressionContext();
const QgsExpressionContext *evalContext = context ? context : &scopedContext;
bool forceUpdate = false;
//updates data defined properties and redraws item to match
if ( property == QgsComposerObject::LegendTitle || property == QgsComposerObject::AllProperties )
{
bool ok = false;
QString t = mDataDefinedProperties.valueAsString( QgsComposerObject::LegendTitle, *evalContext, mTitle, &ok );
if ( ok )
{
mSettings.setTitle( t );
forceUpdate = true;
}
}
if ( property == QgsComposerObject::LegendColumnCount || property == QgsComposerObject::AllProperties )
{
bool ok = false;
int cols = mDataDefinedProperties.valueAsInt( QgsComposerObject::LegendColumnCount, *evalContext, mColumnCount, &ok );
if ( ok && cols >= 0 )
{
mSettings.setColumnCount( cols );
forceUpdate = true;
}
}
if ( forceUpdate )
{
adjustBoxSize();
update();
}
QgsComposerObject::refreshDataDefinedProperty( property, context );
}
示例11: createExpressionContext
void QgsActionManager::doAction( int index, const QgsFeature& feat, int defaultValueIndex )
{
QgsExpressionContext context = createExpressionContext();
QgsExpressionContextScope* actionScope = new QgsExpressionContextScope();
actionScope->setVariable( "current_field", feat.attribute( defaultValueIndex ) );
context << actionScope;
doAction( index, feat, context );
}
示例12: setBrush
void QgsComposerItem::setBackgroundColor( const QColor &backgroundColor )
{
mBackgroundColor = backgroundColor;
setBrush( QBrush( mBackgroundColor, Qt::SolidPattern ) );
// apply any datadefined overrides
QgsExpressionContext context = createExpressionContext();
refreshBackgroundColor( true, context );
}
示例13: while
QString QgsAttributeAction::expandAction( QString action, QgsFeature &feat, const QMap<QString, QVariant> *substitutionMap )
{
// This function currently replaces each expression between [% and %]
// in the action with the result of its evaluation on the feature
// passed as argument.
// Additional substitutions can be passed through the substitutionMap
// parameter
QString expr_action;
int index = 0;
while ( index < action.size() )
{
QRegExp rx = QRegExp( "\\[%([^\\]]+)%\\]" );
int pos = rx.indexIn( action, index );
if ( pos < 0 )
break;
int start = index;
index = pos + rx.matchedLength();
QString to_replace = rx.cap( 1 ).trimmed();
QgsDebugMsg( "Found expression: " + to_replace );
if ( substitutionMap && substitutionMap->contains( to_replace ) )
{
expr_action += action.mid( start, pos - start ) + substitutionMap->value( to_replace ).toString();
continue;
}
QgsExpression exp( to_replace );
if ( exp.hasParserError() )
{
QgsDebugMsg( "Expression parser error: " + exp.parserErrorString() );
expr_action += action.mid( start, index - start );
continue;
}
QgsExpressionContext context = createExpressionContext();
context.setFeature( feat );
QVariant result = exp.evaluate( &context );
if ( exp.hasEvalError() )
{
QgsDebugMsg( "Expression parser eval error: " + exp.evalErrorString() );
expr_action += action.mid( start, index - start );
continue;
}
QgsDebugMsg( "Expression result is: " + result.toString() );
expr_action += action.mid( start, pos - start ) + result.toString();
}
expr_action += action.mid( index );
return expr_action;
}
示例14: replaceDateText
QString QgsComposerLabel::displayText() const
{
QString displayText = mText;
replaceDateText( displayText );
QgsExpressionContext context = createExpressionContext();
return QgsExpression::replaceExpressionText( displayText, &context, mDistanceArea );
}
示例15: replaceDateText
QString QgsLayoutItemLabel::currentText() const
{
QString displayText = mText;
replaceDateText( displayText );
QgsExpressionContext context = createExpressionContext();
return QgsExpression::replaceExpressionText( displayText, &context, mDistanceArea.get() );
}