From 2b78922b43d9ebd7056359c18635e2125c83ae7f Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Mon, 22 Nov 2021 15:51:40 +0100 Subject: [PATCH] IOT example: Make text label retain position when changing value (#150) --- examples/iotdashboard/LightDisplay.cpp | 2 +- examples/iotdashboard/LightDisplaySkinlet.cpp | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/examples/iotdashboard/LightDisplay.cpp b/examples/iotdashboard/LightDisplay.cpp index e03d12c8..4f7ee68c 100644 --- a/examples/iotdashboard/LightDisplay.cpp +++ b/examples/iotdashboard/LightDisplay.cpp @@ -26,7 +26,7 @@ LightDisplay::LightDisplay( QQuickItem* parent ) : QskBoundedValueInput( parent ) { setAlignmentHint( LeftLabel, Qt::AlignRight ); - setAlignmentHint( ValueText, Qt::AlignCenter | Qt::AlignHCenter ); + setAlignmentHint( ValueText, Qt::AlignRight ); setBoundaries( 0, 100 ); diff --git a/examples/iotdashboard/LightDisplaySkinlet.cpp b/examples/iotdashboard/LightDisplaySkinlet.cpp index ca551f23..0219985c 100644 --- a/examples/iotdashboard/LightDisplaySkinlet.cpp +++ b/examples/iotdashboard/LightDisplaySkinlet.cpp @@ -34,8 +34,7 @@ QRectF LightDisplaySkinlet::subControlRect( const QskSkinnable* skinnable, const qreal ticksSpacing = 4; // space between the ticks and the arc if( subControl == LightDisplay::Groove - || subControl == LightDisplay::Panel - || subControl == LightDisplay::ValueText ) + || subControl == LightDisplay::Panel ) { QSizeF textSize = textLabelsSize( display ); QskArcMetrics arcMetrics = display->arcMetricsHint( LightDisplay::ColdAndWarmArc ); @@ -67,6 +66,16 @@ QRectF LightDisplaySkinlet::subControlRect( const QskSkinnable* skinnable, const QRectF rect = arcRect.marginsAdded( { ticksWidth, ticksWidth, ticksWidth, ticksWidth } ); return rect; } + else if( subControl == LightDisplay::ValueText ) + { + QRectF valueTextRect = subControlRect( skinnable, contentsRect, + LightDisplay::Panel ); + const QFontMetricsF fm( skinnable->effectiveFont( subControl ) ); + const qreal fontWidth = fm.width( QStringLiteral( "100 %" ) ); + const QPointF center = valueTextRect.center(); + const QRectF rect( center.x() - fontWidth / 2, center.y() - fm.height() / 2, fontWidth, fm.height() ); + return rect; + } else if( subControl == LightDisplay::LeftLabel ) { const QRectF ticksRect = subControlRect( skinnable, contentsRect, LightDisplay::Tickmarks );