IOT example: Make text label retain position when changing value (#150)

This commit is contained in:
Peter Hartmann 2021-11-22 15:51:40 +01:00 committed by GitHub
parent ccc26d0bf8
commit 2b78922b43
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 3 deletions

View File

@ -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 );

View File

@ -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 );