Add diagram

This commit is contained in:
Peter Hartmann 2020-08-26 17:22:43 +02:00
parent f0ff236203
commit bbc1b2b631
4 changed files with 113 additions and 20 deletions

View File

@ -0,0 +1,54 @@
#include "Diagram.h"
#include <QPainter>
static constexpr int segments = 7;
Diagram::Diagram( QQuickItem* parent )
: QskControl( parent )
, m_content( new DiagramContent( this ) )
{
setAutoLayoutChildren( true );
}
void Diagram::updateLayout()
{
m_content->setContentsSize( size().toSize() );
m_content->update();
}
DiagramContent::DiagramContent( QQuickItem* parent ) : QQuickPaintedItem( parent )
{
}
void DiagramContent::paint( QPainter* painter )
{
// auto size = contentsSize();
// QRectF outerRect( {0, 0}, size );
painter->setRenderHint( QPainter::Antialiasing, true );
qreal stepSize = width() / segments;
QLinearGradient myGradient( {width() / 2, 0}, {width() / 2, height()} );
myGradient.setColorAt( 0, "#996776FF" );
myGradient.setColorAt( 1, "#116776FF" );
QPen myPen( Qt::transparent );
QPainterPath myPath;
myPath.moveTo( 0, height() );
qreal ys[7] = {0.8, 0.85, 0.92, 0.5, 0.88, 0.7, 0.8};
for( int i = 0; i < stepSize; i++ )
{
qreal x1 = i * stepSize + stepSize / 2;
qreal y = ys[i] * height();
qreal x2 = x1;
myPath.cubicTo( x1, y, x2, height() * ( 1 - ys[i] ), stepSize * ( i + 1 ), height() * ( 1 - ys[i] ) );
}
painter->setBrush( myGradient );
painter->setPen( myPen );
painter->drawPath( myPath );
}

View File

@ -0,0 +1,33 @@
#ifndef DIAGRAM_H
#define DIAGRAM_H
#include <QskControl.h>
#include <QQuickPaintedItem>
class DiagramContent;
class Diagram : public QskControl
{
Q_OBJECT
public:
Diagram( QQuickItem* parent );
void updateLayout() override;
private:
DiagramContent* m_content;
};
class DiagramContent : public QQuickPaintedItem
{
Q_OBJECT
public:
DiagramContent( QQuickItem* parent);
virtual void paint(QPainter *painter) override;
};
#endif // DIAGRAM_H

View File

@ -1,6 +1,7 @@
#include "MainContent.h"
#include "Card.h"
#include "Diagram.h"
#include "Humidity.h"
#include "IndoorTemperature.h"
#include "MyDevices.h"
@ -14,37 +15,40 @@
#include <QskGridBox.h>
#include <QskTextLabel.h>
MainContent::MainContent( QQuickItem *parent ) : QskLinearBox( Qt::Vertical, parent )
MainContent::MainContent( QQuickItem* parent ) : QskLinearBox( Qt::Vertical, parent )
{
setSizePolicy( QskSizePolicy::Expanding, QskSizePolicy::Expanding );
setDefaultAlignment(Qt::AlignTop);
setSpacing(30);
setDefaultAlignment( Qt::AlignTop );
setSpacing( 30 );
auto* topBar = new TopBar(this);
auto* topBar = new TopBar( this );
auto* gridBox = new QskGridBox(this);
gridBox->setMargins({15, 0, 15, 20});
gridBox->setPanel(true);
gridBox->setBoxShapeHint(QskBox::Panel, 6 );
auto* gridBox = new QskGridBox( this );
gridBox->setMargins( {15, 0, 15, 20} );
gridBox->setPanel( true );
gridBox->setBoxShapeHint( QskBox::Panel, 6 );
gridBox->setBoxBorderMetricsHint( QskBox::Panel, 2 );
QskBoxBorderColors borderColors("#dddddd");
borderColors.setAlpha(100);
gridBox->setBoxBorderColorsHint( QskBox::Panel, borderColors);
QskBoxBorderColors borderColors( "#dddddd" );
borderColors.setAlpha( 100 );
gridBox->setBoxBorderColorsHint( QskBox::Panel, borderColors );
auto* usage = new Usage(gridBox);
gridBox->addItem(usage, 0, 0, 2, 1);
auto* usage = new Usage( gridBox );
gridBox->addItem( usage, 0, 0, 2, 1 );
auto* indoorTemperature = new IndoorTemperature(gridBox);
gridBox->addItem(indoorTemperature, 0, 1);
auto* indoorTemperature = new IndoorTemperature( gridBox );
gridBox->addItem( indoorTemperature, 0, 1 );
auto* humidity = new Humidity(gridBox);
gridBox->addItem(humidity, 1, 1);
auto* humidity = new Humidity( gridBox );
gridBox->addItem( humidity, 1, 1 );
auto* myDevices = new MyDevices(gridBox);
gridBox->addItem(myDevices, 0, 2, 2, 1);
auto* myDevices = new MyDevices( gridBox );
gridBox->addItem( myDevices, 0, 2, 2, 1 );
auto* diagram = new Diagram( gridBox );
gridBox->addItem( diagram, 2, 0, 0, 2 );
}
void MainContent::addCard( const QString &title, QskControl *content, int column )
void MainContent::addCard( const QString& title, QskControl* content, int column )
{
new Card( title, content, m_columns.at( column ) );
}

View File

@ -4,6 +4,7 @@ SOURCES += \
Card.cpp \
CircularProgressBar.cpp \
DaytimeSkin.cpp \
Diagram.cpp \
Humidity.cpp \
IndoorTemperature.cpp \
MainContent.cpp \
@ -22,6 +23,7 @@ HEADERS += \
Card.h \
CircularProgressBar.h \
DaytimeSkin.h \
Diagram.h \
Humidity.h \
IndoorTemperature.h \
MainContent.h \