qskinny/examples/iot-dashboard/PieChartPainted.cpp

44 lines
1.4 KiB
C++

#include "PieChartPainted.h"
#include <QskSkin.h>
#include <QskTextLabel.h>
#include <QFontMetricsF>
#include <QQuickPaintedItem>
PieChartPainted::PieChartPainted(const QColor& color, const QGradient& gradient, int progress, int value, QQuickItem *parent)
: QskControl(parent)
, m_color(color)
, m_gradient(gradient)
, m_progressBar(new CircularProgressBar(gradient, progress, this))
, m_progressLabel(new QskTextLabel(this))
// , m_numberLabel(new QskTextLabel(QString::number(value), this))
// , m_unitLabel(new QskTextLabel("kwH", this))
{
setAutoLayoutChildren(true);
auto progressText = QString::number(progress) + " %";
m_progressLabel->setText(progressText);
m_progressLabel->setFontRole(QskSkin::SmallFont);
m_progressLabel->setTextColor(color);
}
QSizeF PieChartPainted::contentsSizeHint(Qt::SizeHint /*sizeHint*/, const QSizeF& /*size*/) const
{
return {57, 57};
}
void PieChartPainted::updateLayout()
{
m_progressBar->setContentsSize(size().toSize());
m_progressBar->update();
auto rect = contentsRect();
QFontMetricsF progressMetrics(m_progressLabel->effectiveFont(QskTextLabel::Text));
auto textWidth = progressMetrics.width(m_progressLabel->text());
auto posX = rect.width() / 2 - textWidth / 2;
auto posY = rect.height() / 2 - progressMetrics.height() / 2;
m_progressLabel->setPosition({posX, posY});
m_progressLabel->setFixedWidth(textWidth);
}